TreeMap和HashMap的区别?
1 个回答
不要和差点意思的人周旋。流月`TreeMap` 和 `HashMap` 的核心区别主要体现在 **底层结构、排序特性、性能** 上: **1. 底层实现** * **HashMap**:基于 **数组 + 链表 + 红黑树(JDK8 引入)**,通过哈希值定位元素。 * **TreeMap**:基于 **红黑树**,节点按 key 的自然顺序(或自定义比较器)排序存储。 **2. 元素顺序** * **HashMap**:无序,key 的存储顺序不固定。 * **TreeMap**:有序,按 key 排序(升序/自定义 Comparator)。 **3. 查询、插入、删除效率** * **HashMap**: * 正常 O(1) 查找(哈希分布均匀时)。 * 冲突严重时链表 O(n),链表转红黑树后 O(log n)。 * **TreeMap**: * 查找、插入、删除都是 O(log n)(红黑树保证)。 **4. 线程安全** * 两者都 **非线程安全**,需要线程安全可用 `Collections.synchronizedMap()` 或 `ConcurrentHashMap`(HashMap 的替代)/`ConcurrentSkipListMap`(TreeMap 的替代)。 **5. 适用场景** * **HashMap**:更关注 **快速查找**,不关心顺序。 * **TreeMap**:需要 **按 key 排序**,或需要做范围查询(如 `subMap`、`headMap`、`tailMap`)。 **示例代码** ```java Map<String, Integer> hashMap = new HashMap<>(); hashMap.put("b", 2); hashMap.put("a", 1); hashMap.put("c", 3); System.out.println(hashMap); // 无序 Map<String, Integer> treeMap = new TreeMap<>(); treeMap.put("b", 2); treeMap.put("a", 1); treeMap.put("c", 3); System.out.println(treeMap); // {a=1, b=2, c=3} 有序 ```发布于 2025-08-12 18:17 •IP属地 辽宁举报评论收藏
公众号进入网站体验更佳

