HashMap,LinkedHashMap和TreeMap之间的区别

2022-08-31 03:57:52

和 Java 中的 有什么区别?我没有看到输出有任何差异,因为所有三个都有 和 。什么是 s?HashMapLinkedHashMapTreeMapkeySetvaluesHashtable

Map m1 = new HashMap();
m1.put("map", "HashMap");
m1.put("schildt", "java2");
m1.put("mathew", "Hyden");
m1.put("schildt", "java2s");
print(m1.keySet()); 
print(m1.values()); 

SortedMap sm = new TreeMap();
sm.put("map", "TreeMap");
sm.put("schildt", "java2");
sm.put("mathew", "Hyden");
sm.put("schildt", "java2s");
print(sm.keySet()); 
print(sm.values());

LinkedHashMap lm = new LinkedHashMap();
lm.put("map", "LinkedHashMap");
lm.put("schildt", "java2");
lm.put("mathew", "Hyden");
lm.put("schildt", "java2s");
print(lm.keySet()); 
print(lm.values());

答案 1

我更喜欢视觉呈现:

财产 哈希地图 树状图 LinkedHashMap
迭代顺序 没有保证订单,将随着时间的推移而保持不变 根据自然排序排序 插入顺序
获取/放置/删除/包含密钥 O(1) O(log(n)) O(1)
接口 地图 可导航地图, 地图, 排序地图 地图
空值/键 允许 仅值 允许
快速故障行为 迭代器的故障快速行为无法得到保证,在存在不同步并发修改的情况下不可能做出任何硬保证 迭代器的故障快速行为无法得到保证,在存在不同步并发修改的情况下不可能做出任何硬保证 迭代器的故障快速行为无法得到保证,在存在不同步并发修改的情况下不可能做出任何硬保证
实现 红黑树 双链接存储桶
已同步 实现不同步 实现不同步 实现不同步

答案 2

所有三个类都实现了接口,并提供大致相同的功能。最重要的区别是通过条目进行迭代的顺序:Map

  • HashMap对迭代顺序绝对不作任何保证。当添加新元素时,它甚至可以(并且将)完全改变。
  • TreeMap将根据其方法(或外部提供)根据键的“自然排序”进行迭代。此外,它还实现了 SortedMap 接口,该接口包含依赖于此排序顺序的方法。compareTo()Comparator
  • LinkedHashMap将按照条目放入地图的顺序进行迭代

“Hashtable”是基于哈希的映射的通用名称。在Java API的上下文中,是一个过时的类,从Java 1.1时代开始,集合框架存在。它不应该再被使用,因为它的API充斥着重复功能的过时方法,并且它的方法被同步(这可能会降低性能并且通常是无用的)。使用 ConcurrentHashMap 而不是 Hashtable。Hashtable


推荐