博客
关于我
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/

你可能感兴趣的文章
Nginx RTMP 模块使用指南
查看>>
Nginx SSL 性能调优
查看>>
nginx ssl域名配置
查看>>
Nginx SSL私有证书自签,且反代80端口
查看>>
Nginx upstream性能优化
查看>>
Nginx 中解决跨域问题
查看>>
nginx 代理解决跨域
查看>>
Nginx 做负载均衡的几种轮询策略分析
查看>>
Nginx 入门,一篇搞定!
查看>>
Nginx 利用代理转发请求示例
查看>>
Nginx 动静分离与负载均衡的实现
查看>>
Nginx 反向代理 MinIO 及 ruoyi-vue-pro 配置 MinIO 详解
查看>>
nginx 反向代理 转发请求时,有时好有时没反应,产生原因及解决
查看>>
Nginx 反向代理+负载均衡
查看>>
Nginx 反向代理解决跨域问题
查看>>
Nginx 反向代理配置去除前缀
查看>>
nginx 后端获取真实ip
查看>>
Nginx 多端口配置和访问异常问题的排查与优化
查看>>
Nginx 如何代理转发传递真实 ip 地址?
查看>>
Nginx 学习总结(16)—— 动静分离、压缩、缓存、黑白名单、性能等内容温习
查看>>