Collection集合总结

ArrayList: 底层数组,可重复,有序,可存多个null,查快。快速随机访问标志--实现RandomAccess接口,序列化,克隆,初始空数组,容量10,grow方法 每次1.5倍。

浅拷贝:基本数据类型值传递;引用类型,只存地址,在改动原始对象时会同时改变克隆对象的值 需要实现 Cloneable 接口,并覆写 clone() 方法。

深拷贝:基本数据类型值传递;引用类型,创建新对象,并把内容复制过去。

LinkedList:底层双向链表,可重复,有序,可存多个null,插入,删除。

HashMap:实现Map接口, 1.8之前数组+链表。1.8后数组+链表+红黑树,当链表长度阙值达到8时,将转化为红黑树,(将链表转换成红黑树前会判断,如果当前数组的长度小于 64,那么会选择先进行数组 扩容,而不是转换为红黑树),红黑树降低时间复杂度到logN

        key只可以有一个null,value多个null。put时可以put多个key为null的,不报错,以最后一个为准,存value。

       扩容:初始16;扩容为原来的2倍;如果给定初始容量,会扩容到2的幂次方大小

       使用Key计算hashcode

       多线程时,会造成数据丢失。

ConcurrentHashMap:   线程安全,底层实现:

          1.7之前采用分段segment数组+HashEntry数组+链表实现, 分段锁每一段一个锁,一段下包含一个Segment数组,一个segment包含一个HashEntry数组。每个HashEntry是一个链表结构的元素。将要对HashEntry数组修改时,必须首先获得对应的Segment的锁。

          1.8开始 node数组+链表/红黑树。取消了分段锁,采用CAS算法和synchronized来保证并发安全。

          synchronized只锁定当前链表或红黑树的首节点。

HashTable:线程安全(synchronized修饰的方法),效率低

                  扩容:初始11,扩容2n+1;如果给定初始容量,会按照初始容量。

                  不能有 NULLKey NULL VALUE,会报java.lang.NullPointerException。

TreeMap:红黑树,有序。要实现Comparator接口。

Vector:list古老实现类,线程安全, 底层数组

HashSet:实现Set接口,底层是HashMap实现,add()添加元素,使用对象计算hashcode。不可重复。

                 在添加对象时,先用hashcode比较,如果存在相同用equals()比较。

                 两个对象可能hashcode相同,但是也不一定相等。

                只可以存一个NULL,不可重复。add相同的也会只存一个。

LinkedHashSet:是HashSet的子类,可以按照添加顺序遍历。通过LinkedHashMap实现。

TreeSet:底层也是红黑树,可以按照添加顺序遍历,并可以自然排序和定制排序。有序,唯一。重写new Comparator(){ public int compare(Object o1,Object o2){  return o1.compareTo(o2);  }}     进行排序。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值