Map<String, Object> map = new HashMap<String, Object>();
List<String> list = new ArrayList<>();
for (int i = 0; i < 9999999; i++) {
map.put(String.valueOf(i), i);
list.add(String.valueOf(i));
}
long startlist1 = System.currentTimeMillis();
System.out.println("list1 start time=" + startlist1);
for (int i = 0; i < list.size(); i++) {
list.get(i);
}
long endlist1 = System.currentTimeMillis();
System.out.println("list1 end time=" + endlist1);
System.out.println(endlist1 - startlist1);
long startlist2 = System.currentTimeMillis();
System.out.println("list2 start time=" + startlist2);
for (String str : list) {
}
long endlist2 = System.currentTimeMillis();
System.out.println("list2 end time=" + endlist2);
System.out.println(endlist2 - startlist2);
long startlist3 = System.currentTimeMillis();
System.out.println("list3 start time=" + startlist3);
for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) {
iterator.next();
}
long endlist3 = System.currentTimeMillis();
System.out.println("list3 end time=" + endlist3);
System.out.println(endlist3 - startlist3);
// 第一种:普遍使用,二次取值
long startmap1 = System.currentTimeMillis();
System.out.println("map1 start time=" + startmap1);
for (String key : map.keySet()) {
map.get(key);
}
long endmap1 = System.currentTimeMillis();
System.out.println("map1 end time=" + endmap1);
System.out.println(endmap1 - startmap1);
// 第二种
long startmap2 = System.currentTimeMillis();
System.out.println("map2 start time=" + startmap2);
Iterator<Map.Entry<String, Object>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, Object> entry = it.next();
entry.getKey();
entry.getValue();
}
long endmap2 = System.currentTimeMillis();
System.out.println("map2 end time=" + endmap2);
System.out.println(endmap2 - startmap2);
// 第三种:推荐,尤其是容量大时
long startmap3 = System.currentTimeMillis();
System.out.println("map3 start time=" + startmap3);
for (Map.Entry<String, Object> entry : map.entrySet()) {
entry.getKey();
entry.getValue();
}
long endmap3 = System.currentTimeMillis();
System.out.println("map3 end time=" + endmap3);
System.out.println(endmap3 - startmap3);
// 第四种
long startmap4 = System.currentTimeMillis();
System.out.println("map4 start time=" + startmap4);
for (Object obj : map.values()) {
}
long endmap4 = System.currentTimeMillis();
System.out.println("map4 end time=" + endmap4);
System.out.println(endmap4 - startmap4);
结果:
list1 start time=1545893724716
list1 end time=1545893724724
8
list2 start time=1545893724724
list2 end time=1545893724795
71
list3 start time=1545893724795
list3 end time=1545893724804
9
map1 start time=1545893724805
map1 end time=1545893725062
257
map2 start time=1545893725062
map2 end time=1545893725278
216
map3 start time=1545893725278
map3 end time=1545893725491
213
map4 start time=1545893725491
map4 end time=1545893725661
170