HashMap, LinkedHashMap 和 TreeMap的区别

原文链接:HashMap, LinkedHashMap 和 TreeMap的区别_Gogo-2020的博客-CSDN博客_treemap和hashmap的区别HashMap, LinkedHashMap 和 TreeMap的区别Java里面的HashMap, LinkedHashMap 和 TreeMap 有什么区别?我看不出以下3个key和value有什么不同的。Hashtables里面又是怎么样的呢?Map m1 = new HashMap();m1.put("map", "HashMap");m1.put("schildt", "java2");m1.put("mathew", "Hyden");m1.put("schildt", "java2https://blog.csdn.net/weixin_44560620/article/details/116602190

Java里面的HashMap, LinkedHashMap 和 TreeMap 有什么区别?我看不出以下3个key和value有什么不同的。Hashtables里面又是怎么样的呢?

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());
回答一
所有这三个类都实现Map接口,并且提供功能大部分都是一样的。最重要的区别是通过entry进行迭代的顺序:

HashMap完全不保证迭代的顺序。它可以完全改变元素添加的顺序
TreeMap会根据 key的compareTo() 方法(或者是一个外部的比较器) 来实现一个自然顺序 进行迭代,另外他实现了SortedMap接口(含有依赖于这个排序顺序的方法)
LinkedHashMap将会按entry插入map的顺序进行迭代
“Hashtable” 是 基于hash的映射的一个通用名字。在Java 的API里面,Hashtable是一个来自于Java1.1版本,在集合框架存在之前的已经过时的类了。他不应该再次被使用了,因为他的API里面充斥着各种过时的方法和重复的功能。并且他的方法是基于synchronized的(可能会降低性能并且通常来说是用不到的)。用ConcurrentHashMap去替代它吧。

回答二
这3个都是唯一的key到一个value的映射,故而都实现了map接口

HashMap是一个基于key的哈希映射。它支持 O(1) 时间复杂度的get/put操作。key一定要一致地实现hashCode() 和 equals()方法,这样才能使得HashMap可以正常工作。

LinkedHashMap和HashMap很像,但是它添加对于元素插入顺序的保存,所以他的迭代顺序是和插入顺序相同的(或者是访问顺序,取决于构造器的参数)

TreeMap是一种基于树的映射。它的put/get操作需要O(log n)的时间复杂度。它要求item的元的Comparable or Comparator有相同的比较机制。而它的迭代次序就是基于这个机制的。

文章翻译自Stack Overflow:https://stackoverflow.com/questions/2889777/difference-between-hashmap-linkedhashmap-and-treemap

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值