集合框架是 Java 日常開發最高頻工具。本文聚焦 Map 與 List 兩大核心接口,梳理增刪改查、遍歷、類型安全等實戰高頻操作,附帶可直接運行的代碼片段。
| 操作 | 方法 | 說明 |
|---|---|---|
| 新增/更新 | put(K key, V value) | 鍵存在則覆蓋,返回舊值 |
| 刪除單個 | remove(Object key) | 按鍵刪除,返回被刪除的值 |
| 清空 | clear() | 移除所有映射 |
| 獲取值 | get(Object key) | 鍵不存在返回 null |
| 鍵是否存在 | containsKey(Object key) | O(1) 平均複雜度 |
| 值是否存在 | containsValue(Object value) | O(n) 需遍歷 |
| 大小 | size() | 映射對數 |
| 所有鍵 | keySet() | 返回 Set<K> 視圖 |
| 所有值 | values() | 返回 Collection<V> 視圖 |
| 所有鍵值對 | entrySet() | 返回 Set<Map.Entry<K,V>>,遍歷首選 |
Map<Integer, String> map = new HashMap<>();
map.put(1, "一"); map.put(2, "二"); map.put(3, "三"); map.put(4, "四");
map.remove(1);
System.out.println("元素數量:" + map.size()); // 3
System.out.println("鍵4對應值:" + map.get(4)); // 四
System.out.println("是否包含鍵1:" + map.containsKey(1)); // false
System.out.println("是否包含值\"二\":" + map.containsValue("二")); // true
// 1. entrySet - 單次查找獲取鍵值,性能最佳
for (Map.Entry<Integer, String> entry : map.entrySet()) {
System.out.println(entry.getKey() + "=" + entry.getValue());
}
// 2. keySet + get - 兩次查找,可讀性好
for (Integer key : map.keySet()) {
System.out.println(key + "=" + map.get(key));
}
// 3. values - 僅需值
for (String value : map.values()) {
System.out.println(value);
}
| 操作 | 方法 | 說明 |
|---|---|---|
| 尾部添加 | add(E e) | 返回 true |
| 指定位置插入 | add(int index, E e) | 後續元素右移 |
| 按索引獲取 | get(int index) | O(1) ArrayList / O(n) LinkedList |
| 按索引刪除 | remove(int index) | 返回被刪除元素 |
| 按對象刪除 | remove(Object o) | 刪除首個匹配項 |
| 清空 | clear() | |
| 判斷包含 | contains(Object o) | 依賴 equals() |
| 大小 | size() | |
| 設置值 | set(int index, E e) | 返回舊值 |
| 索引查找 | indexOf(Object o) | 首次出現位置,無則 -1 |
List<String> list = new ArrayList<>();
list.add("jackie"); list.add("peter"); list.add("annie");
list.add("martin"); list.add("marry");
// 1. 索引 for 循環 - ArrayList 推薦
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
// 2. 增強 for (foreach) - 最通用
for (String s : list) {
System.out.println(s);
}
// 3. Iterator - 需邊遍歷邊刪除時必須用
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String s = it.next();
if (s.startsWith("m")) it.remove(); // 安全刪除
}
// 4. ListIterator - 雙向遍歷、可添加、可修改,List 專用
ListIterator<String> lit = list.listIterator();
while (lit.hasNext()) { System.out.println(lit.next()); }
while (lit.hasPrevious()) { System.out.println(lit.previous()); }
// 強類型集合 - 編譯期檢查,避免 ClassCastException
Map<String, Integer> map = new HashMap<>();
List<Employee> list = new ArrayList<>();
// 鑽石操作符 <> (Java 7+) 省略右側類型參數
Map<String, List<Integer>> complex = new HashMap<>();
HashMap;需有序用 LinkedHashMap(插入序/訪問序);需排序用 TreeMap;高併發用 ConcurrentHashMapArrayList;首尾頻繁增刪用 LinkedList;線程安全用 Collections.synchronizedList 或 CopyOnWriteArrayList熟練掌握核心 API、遍歷模式、泛型聲明,能顯著減少低級錯誤與性能陷阱。實際開發中,優先選用接口類型聲明變量(如 List<String> list = new ArrayList<>()),便於實現類切換。