Map 集合初始化時,指定集合初始值大小。
說明:HashMap 使用 HashMap(int initialCapacity) 初始化。
正例:initialCapacity = (需要存儲的元素個數 / 負載因子) + 1。注意負載因子(即 loaderfactor)默認為 0.75,如果暫時無法確定初始值大小,請設置為 16(即默認值)。
反例:HashMap 需要放置 1024 個元素,由於沒有設置容量初始大小,隨着元素不斷增加,容量 7 次被迫擴大,resize 需要重建 hash 表,嚴重影響性能。
/**
*
* 測試類
*/
@org.junit.Test
public void testHashMap() {
Map<String, String> map = new HashMap<>(4);
map.put("1", "a");
map.put("2", "b");
map.put("3", "c");
map.put("4", "d");
System.out.println("------------------- map.keySet()-------------------------");
//獲取所有的 key,根據 key 取出對應的value
for (String key : map.keySet()) {
System.out.println("key:" + key + ",value:" + map.get(key));
}
System.out.println("------------------獲取map種所有的value:map.values()--------------------------");
//遍歷所有的value
for (String value : map.values()) {
System.out.println("value:" + value);
}
System.out.println("-------------------獲取鍵值對:map.entrySet()-------------------------");
//取出對應的 key,value 鍵值對,容量大時推薦使用
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println("鍵值對:" + entry);
//獲取 鍵值對的 key
System.out.println("key:" + entry.getKey());
//獲取 鍵值對的 value
System.out.println("value:" + entry.getValue());
}
System.out.println("--------------------- 通過 Map.entrySet使用iterator遍歷 key 和 value -----------------------");
Iterator<Map.Entry<String, String>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, String> entry = iterator.next();
System.out.println("key:" + entry.getKey() + ",value:" + entry.getValue());
}
System.out.println("-------------------- map.forEach JDK1.8 新特性 ----------------------");
map.forEach((key, value) -> {
System.out.println("key=" + key + ",value=" + value);
});
}
推薦:
使用 entrySet 遍歷 Map 類集合 KV,而不是 keySet 方式進行遍歷。
說明: keySet 其實是遍歷了 2 次,一次是轉為 Iterator 對象,另一次是從 hashMap 中取出key 所對應的 value。而 entrySet 只是遍歷了一次就把 key 和 value 都放到了 entry 中,效率更高。
如果是 JDK8,使用 Map.foreach 方法。
正例: values()返回的是 V 值集合,是一個 list 集合對象; keySet()返回的是 K 值集合,是一個 Set 集合對象; entrySet()返回的是 K-V 值組合集合