
| HashMap | HashTable | |
| 繼承方式 | extends AbstractMap implements Map  | extends Dictionary implements Map  | 
| 線程安全 | 否 | 是(方法都是synchronized修飾) | 
| 效率相對比 | 高 | 低 | 
| 允許有null的鍵和值 | 是 | 否 | 
| 判斷包含的方法 | containsvalue和containsKey | contains | 
hash數(shù)組默認(rèn)大小  | 11 
  | 16 
  | 
hash數(shù)組增加方式  | old*2+1  | 2的指數(shù)增加  | 
1 List<String> list = new ArrayList<String>(); 2 3 String PReString = "aa"; 4 for (int j = 0; j < 100000000; j++) { 5 list.add(preString); 6 } 7 8 // 方法1(速度最快,List特有的) 9 for (int i = 0, len = list.size(); i < len; i++) {10 list.get(i);11 }12 13 // 方法2 (for each-最耗時(shí))14 for (String tmp : list) {15 }16 17 // 方法3(與方法2,4一樣,適用所有實(shí)現(xiàn)了Iterable接口的類,常見的有:Queue,Set,Collection,List)18 Iterator<String> iter = list.iterator();19 while (iter.hasNext()) {20 String str = iter.next();21 }22 23 // 方法424 for (Iterator<String> it2 = list.iterator(); it2.hasNext();) {25 String str = it2.next();26 }
2.map的遍歷
1 HashMap<Integer, String> map = new HashMap<>(); 2 String v = "value"; 3 for(int i=0;i<10000000;i++){ 4 map.put(i, v); 5 } 6 7 //方法1, 8 Iterator<Map.Entry<Integer, String>> it1= map.entrySet().iterator(); 9 while (it1.hasNext()) {10 Map.Entry<Integer, String> entry =it1.next();11 int key = entry.getKey();12 String value = entry.getValue();13 }14 15 //方法2 獲取map的key集合的迭代器,耗時(shí)是方法1的7倍。16 Iterator<Integer> it2 = map.keySet().iterator();17 while(it2.hasNext()){18 int key = it2.next();19 String value = map.get(key);20 }21
set 和map的遍歷方式類似,就不在這里啰嗦了。
新聞熱點(diǎn)
疑難解答
圖片精選