本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

Collection集合总结

发布于2021-05-29 20:54     阅读(957)     评论(0)     点赞(6)     收藏(4)


ArrayList: 底层数组,可重复,有序,可存多个null,查快。快速随机访问标志--实现RandomAccess接口,序列化,克隆,

浅拷贝:基本数据类型值传递;引用类型,只存地址,在改动原始对象时会同时改变克隆对象的值 {addll(),for循环add,构造器,System.arraycopy}

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

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);  }}     进行排序。

 

 

 

 

 

 

 

 

 



所属网站分类: 技术文章 > 博客

作者:以天使的名义

链接:http://www.javaheidong.com/blog/article/207228/f116cf0321d823b7d2df/

来源:java黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

6 0
收藏该文
已收藏

评论内容:(最多支持255个字符)