博客
关于我
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学习-MySQL条件查询
查看>>
MySQL学习-SQL语句的分类与MySQL简单查询
查看>>
MySQL学习-子查询及limit分页
查看>>
MySQL学习-排序与分组函数
查看>>
MySQL学习-连接查询
查看>>
Mysql学习总结(10)——MySql触发器使用讲解
查看>>
Mysql学习总结(12)——21分钟Mysql入门教程
查看>>
Mysql学习总结(13)——使用JDBC处理MySQL大数据
查看>>
Mysql学习总结(15)——Mysql错误码大全
查看>>
Mysql学习总结(17)——MySQL数据库表设计优化
查看>>
Mysql学习总结(18)——Mysql主从架构的复制原理及配置详解
查看>>
Mysql学习总结(19)——Mysql无法创建外键的原因
查看>>
Mysql学习总结(20)——MySQL数据库优化的最佳实践
查看>>
Mysql学习总结(21)——MySQL数据库常见面试题
查看>>
Mysql学习总结(22)——Mysql数据库中制作千万级测试表
查看>>
Mysql学习总结(23)——MySQL统计函数和分组查询
查看>>
Mysql学习总结(24)——MySQL多表查询合并结果和内连接查询
查看>>
Mysql学习总结(25)——MySQL外连接查询
查看>>
Mysql学习总结(26)——MySQL子查询
查看>>
Mysql学习总结(27)——Mysql数据库字符串函数
查看>>