博客
关于我
java的运行效率问题(求解!!!)
阅读量:364 次
发布时间:2019-03-04

本文共 2545 字,大约阅读时间需要 8 分钟。

在我java做数据结构的题时,对于java运行效率一直都很费解!!!

看似改进了代码,但是运存和运行时间并没改变!

“改进”前的代码:

import java.util.*;public class Main {       //初始数组    public static int[] array;    //维护set集合的list    public static List
> setArray=new ArrayList<>(); public static void main(String[] args) { //提前声明,避免在循环中声明占内存 int z,a,b; //创建一个文本扫描器检测键盘输入 Scanner scanner=new Scanner(System.in); //N个元素 int N=scanner.nextInt(); //M个操作 int M=scanner.nextInt(); //初始化array,确保下标即为对应的值 array=new int[N+1]; for (int i=0;i
findOne(int a){ if (array[a]!=0){ return null; } //在维护set集合的数组中遍历 for (Set
set:setArray){ //调用contain方法,若存在则返回该集合 if (set.contains(a)){ return set; } } //这道题不可能执行到这步,除非系统想搞我们!当然我们也不怕 return null; } /** * 1.调用findOne查找a所在集合 * 2.在集合中查找是否存在b * 3.若有则输出打印Y,没有则N * @param a * @param b */ public static void findTwo(int a,int b){ Set
set=findOne(a); if (set==null){ //集合为空时,即a在数组中时输出N System.out.println("N"); }else if (set.contains(b)){ System.out.println("Y"); }else{ //不包含时输出N System.out.println("N"); } } /** * 1.用私有方法findOne查询a,b所在集合 * 2.合并 * @param a * @param b */ public static void merge(int a,int b){ Set
set1=findOne(a); Set
set2=findOne(b); //分别讨论几种情况 if (set1==null&&set2!=null){ set2.add(a); //原来数组的值清0 array[a]=0; }else if (set1!=null&&set2==null){ set1.add(b); array[b]=0; }else if (set1==null&&set2==null){ //此时需要创建一个set集合,并清0 Set
set=new HashSet
(); set.add(a); set.add(b); //别忘了加入list集合,粗心的我就忘了!汗。。。 setArray.add(set); array[a]=0; array[b]=0; }else { //判断两个集合是否相等 if (set1!=set2){ //确保小的集合加入大的集合 if (set1.size()

时间效率如下图:

在这里插入图片描述

我做出了改进,缩短了很多代码,而且避开使用封装好的类,尽量写底层代码,以争取尽可能好的效果

可是。。。。。。。

以下是我“改进后”代码:

import org.w3c.dom.Node;import java.util.*;public class Main {       //此数组下标即为其data    public static int[] array;    public static void main(String[] args) {           //提前声明,避免在循环中声明占内存        int z,a,b;        //创建一个文本扫描器检测键盘输入        Scanner scanner=new Scanner(System.in);        //N个元素        int N=scanner.nextInt();        //M个操作        int M=scanner.nextInt();        //初始化array,确保下标即为对应的值        array=new int[N+1];        for (int i=0;i

结果如图:

在这里插入图片描述
可以发现结果并没有什么改进,甚至比原来的运行效率还要低,这就是我不能理解的地方,希望有能力的大佬能解答一下。

谢谢!

转载地址:http://ocfg.baihongyu.com/

你可能感兴趣的文章
mysql CPU使用率过高的一次处理经历
查看>>
Multisim中555定时器使用技巧
查看>>
MySQL CRUD 数据表基础操作实战
查看>>
multisim变压器反馈式_穿过隔离栅供电:认识隔离式直流/ 直流偏置电源
查看>>
mysql csv import meets charset
查看>>
multivariate_normal TypeError: ufunc ‘add‘ output (typecode ‘O‘) could not be coerced to provided……
查看>>
MySQL DBA 数据库优化策略
查看>>
multi_index_container
查看>>
mutiplemap 总结
查看>>
MySQL Error Handling in Stored Procedures---转载
查看>>
MVC 区域功能
查看>>
MySQL FEDERATED 提示
查看>>
mysql generic安装_MySQL 5.6 Generic Binary安装与配置_MySQL
查看>>
Mysql group by
查看>>
MySQL I 有福啦,窗口函数大大提高了取数的效率!
查看>>
mysql id自动增长 初始值 Mysql重置auto_increment初始值
查看>>
MySQL in 太多过慢的 3 种解决方案
查看>>
Mysql Innodb 锁机制
查看>>
MySQL InnoDB中意向锁的作用及原理探
查看>>
MySQL InnoDB事务隔离级别与锁机制深入解析
查看>>