HTML5技术

这短短几行代码价值一万 - 小尧弟(2)

字号+ 作者:H5之家 来源:H5之家 2017-04-22 09:00 我要评论( )

/* 条件:capacity = 100000 结果: 生成时间 :33------ 插入检查方法 -------查找时间 :6612重复 :76871正确 :23129------ 排序检查方法 -------查找时间 :91重复 :76871正确 :23129 */ /* 条件:capacity

/* 条件:capacity = 100000 结果: 生成时间 :33 ------ 插入检查方法 ------- 查找时间 :6612 重复 :76871 正确 :23129 ------ 排序检查方法 ------- 查找时间 :91 重复 :76871 正确 :23129 */ /* 条件:capacity = 1000000 结果: 生成时间 :392 ------ 插入检查方法 ------- 查找时间 :1033818 重复 :703036 正确 :296964 ------ 排序检查方法 ------- 查找时间 :1367 重复 :703036 正确 :296964 */

 

当数据量达到10万条的时候,查找时间比差不多90倍的差距了;当数据量达到100万时,我这边测试数据已经卡死在test1(),而test2()依然能在数十秒内反馈结果。

先来说一下我这些代码:

1 Collections.sort(list); 2 String str = list.get(0); 3 int max = list.size(); 4 for (int i = 1; i < max; i++) { 5 if (str.equals(list.get(i))) { 6 repetition++; 7 continue; 8 } 9 newlist.add(str); 10 str = list.get(i); 11 }

 

Line 1:排序,加入list排序后的结果是[1,2,2,3,3,3,4,4,4,4,5,5,5,5,5]

Line 2:初始str = 1;

从Line 4开始进入循环:

Line 5:判断str是否和当先selector值相等(暂借我们认为list.get(i)是一个指针),如果相等则跳过以下步骤进入下一个循环

Line 9:将str = 1,加入newlist尾

Line10:将当前selector值赋给str,此时str=2,进入下一个循环

...

这种语言解释我个人觉得特别麻烦,我还是写段代码让程序告诉你它怎么执行的。

appList { 2 static ArrayList<String> list = new ArrayList<String>(); 3 static ArrayList<String> newlist = new ArrayList<String>(); main(String[] args) { 6 for (int i = 1; i < 5 + 1; i++) { 7 for (int j = 0; j < i; j++) { 8 list.add(Integer.toString(i)); 9 } 10 } 11 System.out.println("list初始值 " + list.toString()); String str = list.get(0); 15 int max = list.size(); 16 for (int i = 1; i < max; i++) { 17 Print(i); 18 if (str.equals(list.get(i))) { 19 PrintNew(); 20 continue; 21 } 22 newlist.add(str); 23 System.out.println("add\t" + str); 24 str = list.get(i); 25 PrintNew(); 26 } 27 28 newlist.add(str); 29 System.out.println("add\t" + str); 30 PrintNew(); 31 32 System.out.println("newlist值 " + newlist.toString()); } PrintNew(){ 37 StringBuilder stringBuilder = new StringBuilder(); 38 stringBuilder.append("newlist\t"); 39 for (int i = 0; i < newlist.size(); i++) { 40 stringBuilder.append(newlist.get(i)); 41 stringBuilder.append(","); 42 } 43 System.out.println(stringBuilder.toString()); 44 System.out.println(); 45 } Print(int pos) { 47 StringBuilder stringBuilder = new StringBuilder(); 48 stringBuilder.append("list\t"); 49 for (int i = 0; i < list.size(); i++) { 50 if (i == pos) { 51 stringBuilder.append("["); 52 stringBuilder.append(list.get(i)); 53 stringBuilder.append("],"); 54 } else { 55 stringBuilder.append(list.get(i)); 56 stringBuilder.append(","); 57 } 58 } 59 System.out.println(stringBuilder.toString()); 60 }

 

以上代码执行结果:

 

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • Android 代码库(自定义一套 Dialog通用提示框 ) - 小小情意

    Android 代码库(自定义一套 Dialog通用提示框 ) - 小小情意

    2017-04-21 11:01

  • 前端实现搜索记录功能也就是天猫app历史记录存储方便浏览 - 今天的代码你撸了嘛

    前端实现搜索记录功能也就是天猫app历史记录存储方便浏览 - 今天的代

    2017-04-12 14:00

  • flash跳帧代码 - 鬼界家族

    flash跳帧代码 - 鬼界家族

    2017-04-12 14:00

  • C# 超高速高性能写日志 代码开源 - Emrys5

    C# 超高速高性能写日志 代码开源 - Emrys5

    2017-04-12 12:10

网友点评
f