博客
关于我
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 replace first,MySQL中处理各种重复的一些方法
查看>>
MySQL replace函数替换字符串语句的用法(mysql字符串替换)
查看>>
Mysql Row_Format 参数讲解
查看>>
mysql select, from ,join ,on ,where groupby,having ,order by limit的执行顺序和书写顺序
查看>>
MySQL Server 5.5安装记录
查看>>
mysql slave 停了_slave 停止。求解决方法
查看>>
MySQL SQL 优化指南:主键、ORDER BY、GROUP BY 和 UPDATE 优化详解
查看>>
mysql sum 没返回,如果没有找到任何值,我如何在MySQL中获得SUM函数以返回'0'?
查看>>
mysql Timestamp时间隔了8小时
查看>>
Mysql tinyint(1)与tinyint(4)的区别
查看>>
mysql union orderby 无效
查看>>
mysql where中如何判断不为空
查看>>
mysql workbench6.3.5_MySQL Workbench
查看>>
MySQL Workbench安装教程以及菜单汉化
查看>>
MySQL Xtrabackup 安装、备份、恢复
查看>>
mysql [Err] 1436 - Thread stack overrun: 129464 bytes used of a 286720 byte stack, and 160000 bytes
查看>>
MySQL _ MySQL常用操作
查看>>
MySQL – 导出数据成csv
查看>>
MySQL —— 在CentOS9下安装MySQL
查看>>
mysql 不区分大小写
查看>>