/* 条件: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 }
以上代码执行结果: