Map map = new HashMap<>();
map.put("Name", "June");
map.put("QQ", "2572073701");
Map map = new HashMap<>() {{
put("Name", "June");
put("QQ", "2572073701");
}};
原理:外層大括號建立繼承 HashMap 的匿名內部類,內層大括號為實例初始化區塊,建構子執行前自動執行。
隱患:
.class 檔案(如 Main$1.class),增加類別載入開銷修正:new HashMap<>(map) 複製為標準 HashMap 解決序列化問題。
// List
List list = List.of("A", "B", "C");
// Set
Set set = Set.of("X", "Y", "Z");
// Map(鍵值交替)
Map map = Map.of("k1", 1, "k2", 2, "k3", 3);
// Map.Entry 串聯(10 對以上)
Map map2 = Map.ofEntries(
Map.entry("k1", 1), Map.entry("k2", 2) /*, ... */
);
特點:不可變、空值檢查、記憶體優化、執行緒安全。
Map map = IntStream.rangeClosed(1, 10)
.boxed()
.collect(Collectors.toMap(
i -> i,
i -> "Value" + i,
(v1, v2) -> v1, // 鍵衝突合併策略
LinkedHashMap::new // 保持插入順序
));
for (Map.Entry entry : map.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
// 處理邏輯
}
for (String key : map.keySet()) {
String value = map.get(key); // 額外 hash 查找
}
map.forEach((key, value) -> {
// 處理邏輯
});
| 遍歷方式 | 耗時 (ms) | 相對效能 |
|---|---|---|
| entrySet 迭代器 | ~450 | 100% (基準) |
| forEach Lambda | ~480 | 94% |
| keySet + get | ~720 | 63% |
| Stream API | ~680 | 66% |
Map.of,動態資料用 new HashMap<>() + put 或 Stream 收集器entrySet 或 forEach,避免 keySet + getnew HashMap<>(map) 轉換ConcurrentHashMap