Java不同集合对比

一.List和Set、Map的区别

List和Set都实现了Collection接口,都可以使用forEach进行迭代,Map则需要通过entrySet()方法来转换成Set集合迭代

List是有序,可重复的集合;Set是无序,不可重复集合;Map是无序集合,由键值对组成,键无序不可重复,值无序可重复。

List中可以存null;Set中可以存null(TreeSet不允许存null)因为要确保不重复性,所以只能有一个null;Map中根据不同的Map情况不同,HashMap允许null键(只允许有一个null),null值,TreeMap不允许null键(确保可排序性),但允许null值,Hashtable不允许null键,null值。

List可以通过下标索引查找,迭代顺序一定;Set无序,迭代顺序不一定。

二.ArraysList、LinkedList和Vector区别

三种集合都实现了List接口都是有序,可重复的,可通过下标索引查找,都可以存null。

ArrayList和LinkedList是不同步的是非线程安全的,Vector是同步的是线程安全的。

ArrayList的底层实现是数组;LinkedList底层实现是双链表,同时也实现了Deque接口可以从两端进行操作元素; Vector底层实现也是数组。

在进行元素随机访问时,ArrayList的效率更高;在进行元素插入和删除操作时,LinkedList效率更高。

ArrayList和Vector的底层实现是数组,在内存中储存是连续的;LinkedList底层实现是链表,在储存是不连续的。

三.HashMap和Hashtable的区别

HashMap是非同步的,是非线程安全的;Hashtable是同步的,线程安全的。

HashMap允许null键,null值(只允许有一个null键,键不重复);Hashtable不允许null键,null值。

HashMap的默认容量是16,扩容的方式是2n;Hashtable的默认容量是11,扩容方式是2n+1;

HashMap采用数组+链表/红黑树的方式存储元素(当数组长度大于64,并且链表结点大于8时转换为数组+红黑树存储;当红黑树节点小于6时,继续转为数组+链表存储);Hashtable采用数组+链表的方式存储元素。

四.LinkedHashMap总结

LinkedHashMap继承自HashMap,可以保持元素的插入顺序,LinkedHashMap在HashMap的基础上增加了一个双向链表,用来维护元素的插入顺序。

LinkedHashMap可以在创建的时候对集合的排序模式进行设置LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)

插入顺序(accessOrder = false):新插入的元素会在末尾,迭代是在最后出现。

访问顺序(accessOrder = true):每次访问元素(获取、更新、删除等),都会将该元素移动到链表的末尾。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值