集合

参考:
github上资源
美团:Java 8系列之重新认识HashMap

  1. java集合主要由三个接口派生而成,分别是Map、Collection、Iterable。
    idea构建
    类继承: 蓝色实线
    类实现: 绿色虚线
    接口继承: 绿色实线
    接口实现:??? 不存在的,兄弟。

  1. List Set Map 都是接口,那么他们三者有什么区别?
    List: 有序,可以允许重复
    Set: 不允许重复
    Map: 键值对存储,key不允许重复

  1. List实现类特性
    Arraylist 与 LinkedList 区别? Vector?
    1. 都是线程不安全的类。
    2. Arraylist 底层数据结构为数组的,而LinkedList为双向链表。
    3. 数组有索引,所有查询很快,而链表查询很慢。对于新增和删除,受插入的位置以及数据量大小的影响。在这里插入图片描述
    4. Vector线程安全的类,每一个方法到加了synchronized锁。

  1. HashMap特性
    HashMap,HashTable,ConcurrentHashMap,LinkedHashMap,TreeMap,SortedMap
    HashMap: jdk1.8之前是采用数组+链表(链表散列)的方法,1.8之后就是数组+链表+红黑树的方式。默认大小为n=16,负载英子为0.75。当大小大于16*0.75的时候,开始扩容,扩容为2n。Hashmap是通过hash表来进行存储的。
    在这里插入图片描述
    HashMap进行put的时候经过哪些步骤:
    在这里插入图片描述
    1. 判断table是否为空,如果为空则进行扩容resize。
    2. 根据键值key计算hash值且得到插入的数组索引。
    3. 判断当前索引所在的位置是否有值,没有值得话直接插入,然后再判断是否需要扩容。
    4. 如果当前索引有值,那么循环遍历key是否已经存在,如果存在则直接替换。
    5. 如果key不存在,那么直接插入到链表或者红黑树之中。
      这个为简化版本,方便面试。

  1. HashTable,ConcurrentHashMap,LinkedHashMap,TreeMap
    1. HashTable与ConcurrentHashMap都是线程安全的,但是ConcurrentHashMap效率更加高一点,因为里面采用了分段锁(对具体的桶加锁,桶可以理解为table数组中某一位置,m),而HashTable是对整个方法加锁。效率低。
      在这里插入图片描述
      在这里插入图片描述
    2. LinkedHashMap与TreeMap都是可以排序的map,只不过TreeMap按键来进行升序来进行排序。LinkedHashMap按照插入的顺序来进行排序。

  1. HashSet内部实现都来自于HashMap。 没啥好讲的。

如何选用集合?
根据需要来选,如果需要kv形式的选择map,只需要存储单个值那么用list或者set,有序有list,无序用set。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值