【Java-概念】Map、Set集合存放是无序的,然而LinkedHashSet和LinkedHashMap等集合却有序,请解释是什么原因。

问题:

Map、Set集合存放是无序的,然而LinkedHashSet和LinkedHashMap等集合却有序,请解释是什么原因。

相关概念:

Set集合:

元素无序 (元素存取顺序不一致),元素不重复.Set集合保证元素的唯一性是靠重写HashCode()方法和equals()方法.
HashSet,LinkedHashSet,Treeset
HashSet:

此类实现Set接口,由哈希表(实际是是一个HsahMap实列)支持它不保证Set的迭代顺序;特别是他不保证该顺序恒久不变.此类允许

使用null元素.底层的数据结构是哈希表,线程不安全,效率高,允许存储null元素,元素无序且唯一.

唯一性:是要靠元素重写HashCode()和equals()方法,如果不重写则无法保证元素唯一.

LinkedHashSet:

元素有序且唯一

具有可预知的迭代顺序Set接口的哈希表和链接列表实现.线程不安全,效率高.

底层数据结构是链表和哈希表

链表保证的元素有序,哈希表保证的元素唯一

TreeSet:

元素唯一,且能对元素进行排序线程不安全,效率高

底层数据结构是二叉树.

使用元素的自然顺序对元素进行排序,或者根据创建Set时提供的Comparator进行排序,具体取决于使用的构造方法.

Map<k,v>集合:

类型参数

k-此映射所维护的键的类型

v-映射值的类型

将键映射 到对象.一个映射不能包含重复的键;每个键最多只能映射到一个值.

HashMap:
基于哈希表的map接口的实现.

此实现所提供的所有可选的映射操作,并允许使用null值和null键.(除了非同步和允许使用null之外,HashMap类与Hashtable大致相

同.)此类不保证映射的顺序,特别是它不保证该顺序恒久不变.Map集合所有的数据结构,只跟键有关.

HashMap:是线程不安全,效率高,支持null只和null键

Hashtable:是线程安全,效率低,不支持null只和null键

LinkedHashMap:

Map接口的哈希表和链接列表实现,具有可预知的迭代顺序

特点:底层的数据结构是由哈希表和链表 元素有序 并且唯一元素的有序性由链表数据结构保证 唯一性由哈希表数据结构保证;

Map集合的数据结构只和键有关

TreeMap:

数据结构是二叉树可以对键排序,不允许null键线程不安全效率高.
 

 

 

 

参考资料:https://blog.51cto.com/13852519/2155496

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值