java集合类原理分析

来源:互联网 发布:故事板 mac 编辑:程序博客网 时间:2024/05/16 11:24
Collection------ListArrayList:是有序的;非线程安全;基于数组实现;相比较LinkedList对于数组的查询和更新效率较高;底层实现:内部有一个Object数组,默认初始化数组大小是10,每当数组容量不够时候,会动态扩展数组的长度,按照一次原来1.5倍的速度扩增,调用Arrays.copyof方法,通过反射创建数组;在指定位置插入元素时,先为数组增加一个空间,然后再插入位置之后所有元素移位;有三种访问方式:for循环,迭代器,for循环下标方式Vector:有序的;线程安全;基于数组实现;性能差于ArrayList;相比较LinkedList对于数组的查询和更新效率较高;底层实现:内部有一个Object数组,默认初始化数组大小是10,每当数组容量不够时候,会动态扩展数组的长度,按照一次原来2倍的速度扩增,调用Arrays.copyof方法,通过反射创建数组;在指定位置插入元素时,先为数组增加一个空间,然后再插入位置之后所有元素移位;在指定位置插入元素时,先为数组增加一个空间,然后再插入位置之后所有元素移位;有四种访问方式:for循环,迭代器,枚举,for循环下标方式LinkedList:实现了List,Deque接口,既是有序的,又实现了队列接口;查询和更新较慢,但是插入和删除比较快;每次添加一个元素,size加1内部实现:是基于一个Node的内部类,有item,pre和next三个属性。------Set------HashSet不能有重复元素;是散列,无序的;存入的对象必须实现hashCode()和equals(),保证保存进去的对象是不同的;底层实现:HashMap------TreeSet不能有重复元素,是有序的;底层实现:二叉树;通过Comparator实现排序------MapHashMap:初始化长度为16,加载因子为0.75;不是线程安全的底层实现:数组+链表的方式,有个一Entry的静态内部类,Entry里边有个next属性,实现链表,而数组就是Entry[];数组index=hashcode%table.lengthHashTable:默认初始化长度为11,加载因子为0.75;线程安全底层实现:与HashMap类似。
ConcurrentHashMap和HashTable一样,都是线程安全的,只是加锁的方式不一样,分段加锁,默认有16个段,每个段表示一个Hash表,get时候不需要加锁,大大提高了效率,put不需要加锁。
0 0
原创粉丝点击