HashTable vs HashMap vs TreeMap vs LinkedHashMap对比

HashTable vs HashMap vs TreeMap vs LinkedHashMap对比

一.总览

HashMap:是被实现为hash table,键值排列是无序的。
TreeMap: 是基于红黑树实现的,根据键进行排序的。
LinkedHashMap:根据插入顺序排序。
Hashtable:是同步的,对比HashMap多了同步的开销。

这就是为什么HashMap应使用在线程安全的情况下。因为不同步,所以在多线程的环境下,进行put()会导致多线程数据不一致。

二.HashMap

如果键是自定义的实体,需要重写 equals() 和 hashCode()。HashMap不允许两个相同的元素。默认情况下,会使用Object类中实现的hashCode()和equals()方法。默认的hashCode()方法为截然不同的对象提供了不同的整数,而equals()方法只有在两个引用引用同一对象时才返回true。

默认Object.equals()使用==作为比较,很显然对象这样对比是错误的。

三.TreeMap

TreeMap是按键排序的。

由于TreeMaps是按键排序的,所以键的对象必须能够相互比较,这就是为什么它必须实现可比较的接口。例如,使用String作为键,因为String实现了可比较的接口。

四.Hashtable

HashMap类大致相当于Hashtable,只不过它是不同步的,并且不允许key和value为null。
HashMap是HashTable的轻量级实现(非线程安全),HashMap可以通过collections.synchronizedMap()来达到同步效果。

五.LinkedHashMap

LinkedHashMap是HashMap的子类。这意味着它继承了HashMap的特性。此外,链表保留了插入顺序。

输出顺序与插入顺序是一样的。

补充:

  • HashMap是HashTable的轻量级实现(非线程安全),HashMap可以通过collections.synchronizedMap()来达到同步效果。
  • HashTable:contains,HashMap:containsKey、containsValue
  • HashMap允许有一条记录的键为null,HashTable不允许。
  • HashTable中hash数据默认大小为11,增加方式是old*2+1。在HashMap中,hash数组的默认大小是16,而且一定是2的指数。
  • hash值的使用不同,HashTable直接使用对象的hashCode TreeMap实现SortMap接口,把保存的记录按键来排序。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值