【我要去面试】- 集合

List和Set区别

都是继承自Collection接口

  • 特点
    List:元素有序存放,元素可以重复
    Set:元素无序存放,元素不可以重复,重复元素会被覆盖掉

  • 对比:
    Set:检索元素效率低,删除和插入效率高,插入和删除不会引起元素位置改变。
    List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。

List和Map区别

List是集合,允许对象重复。
Map是键值对的集合,不允许key重复。

ArrayList与LinkedList区别

  • ArrayList:
    优点:动态数组结构、连续存储、查询操作效率高
    缺点:插入和删除操作效率低
    存储:逻辑结构上都是连续的。在物理结构上一定连续。

  • LinkedList:
    优点:基于 链表 的数据结构(无头双向非循环链表),地址是任意的,所以在开辟内存空间时不需要等连续的地址,新增和删除操作有优势。适用于头尾操作或插入指定位置的场景。
    缺点:要移动指针,所以查询操作性能低
    存储:逻辑结构上都是连续的。在物理结构上不一定连续。

适用场景分析:
1)需要对数据对比访问用ArrrayList
2)对数据进行多次增加删除修改时用LinkedList

ArrayList与Vector区别

结论:都是用数组实现
4个区别:
1)Vector线程安全(synchronized),ArrayList非线程安全
2)物理存储相同(连续空间存储),但空间不足时,两个类增加方式不同。
3)Vector可以设置增长因子,ArrayList不可以。
4)Vector是老的动态数组,线程同步,效率低,不赞成使用

List如何保证线程安全

三种线程安全的List

  1. 使用Vector容器
  2. 使用Collections的静态方法synchronizedList(List< T> list)
  3. 采用CopyOnWriteArrayList容器

结论:
读多写少的情况下,推荐使用CopyOnWriteArrayList方式
读少写多的情况下,推荐使用Collections.synchronizedList()静态方法的方式

HashMap和Hashtable区别

  1. hashMap去掉了HashTable的contains方法,但是加上了containsValues()和containsKey()方法
  2. hashTable是同步的,而hastMap是非同步的,效率上比hastTable高。
  3. hastMap允许空键值,而hashTable不允许。

HashSet和HashMap区别

  1. set是线性结构,set中的值不能重复,hashSet是set的hash实现,hashSet中值不能重复是用hashMap的key来实现的。
  2. map是键值对映射,可以空键空值。HashMap是Map接口的hash实现,key的唯一性是通过key值hash值的唯一来确定的,value值是链表结构。
  3. 共同点都是通过hash算法实现唯一性,他们都不能持有基本类型,只能持有对象。

HashMap和ConcurrentHashMap区别

ConcurrentHashMap是线程安全的HashMap实现
1)对整个桶数组进行了分割分段,然后在每个分段上都用了lock锁进行保护,相对于HashTable的synchronized关键字锁粒度更系,性能更好,而HashMap没有锁,不是线程安全。
2)HashMap的键值对允许为Null,ConcurrentHashMap都不允许。

HashMap扩充

HashMap 在底层将 key-value 当成一个整体进行处理,这个整体就是一个 Entry 对象。HashMap 底层采用一个 Entry[] 数组来保存所有的 key-value 对,当需要存储一个 Entry 对象时,会根据hash算法来决定其在数组中的存储位置,在根据equals方法决定其在该数组位置上的链表中的存储位置;当需要取出一个Entry时,也会根据hash算法找到其在数组中的存储位置,再根据equals方法从该位置上的链表中取出该Entry。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值