首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

ArrayList 實現電話本哈希存儲?錯誤選型:應使用 HashMap

     編輯:程式設計疑難解答

核心誤區

ArrayList 是**有序、可重複、基於數組**的列表,不支持哈希存儲。其 add(index, element) 僅能在指定索引插入,**無法通過鍵(如姓名/電話)直接定位**。

正確選型:HashMap

// 鍵:姓名(String)  值:電話(String) 或 Contact 對象
Map<String, String> phoneBook = new HashMap<>();

// 存儲
phoneBook.put("張三", "13800138000");
phoneBook.put("李四", "13900139000");

// 查詢 - O(1) 平均時間複雜度
String phone = phoneBook.get("張三"); // 直接通過姓名獲取

// 遍歷
for (Map.Entry<String, String> entry : phoneBook.entrySet()) {
    System.out.println(entry.getKey() + ": " + entry.getValue());
}

為什麼 HashMap 適合電話本?

特性ArrayListHashMap
查找鍵O(n) 遍歷比對O(1) 哈希直達
鍵唯一性允許重複鍵唯一,自動去重
插入/刪除O(n) 可能需移動元素O(1) 平均
適用場景有序列表、允許重複鍵值對映射、快速查找

進階:封裝 Contact 對象

class Contact {
    String name;
    String phone;
    String email;
    // getter/setter/toString
}

Map<String, Contact> phoneBook = new HashMap<>();
phoneBook.put("張三", new Contact("張三", "13800138000", "zhangsan@email.com"));

// 查詢返回完整對象
Contact contact = phoneBook.get("張三");

其他可選集合

  • LinkedHashMap:保持插入順序遍歷,適合「最近聯繫人」展示
  • TreeMap:按鍵自然順序(字母序)排序,適合通訊錄列表展示
  • Hashtable:線程安全但性能較差,**不推薦新代碼使用**,併發場景用 ConcurrentHashMap

總結

電話本 = 鍵值映射 = HashMap。ArrayList 只能作為輔助(如按插入順序展示所有聯繫人列表),核心存儲與查找必須用 Map 族類。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved