java集合类原理分析

Collection
------List
ArrayList:是有序的;非线程安全;基于数组实现;相比较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实现排序
------Map
HashMap:初始化长度为16,加载因子为0.75;不是线程安全的
底层实现:数组+链表的方式,有个一Entry的静态内部类,Entry里边有个next属性,实现链表,而数组就是Entry[];
数组index=hashcode%table.length
HashTable:
默认初始化长度为11,加载因子为0.75;线程安全
底层实现:与HashMap类似。
ConcurrentHashMap
和HashTable一样,都是线程安全的,只是加锁的方式不一样,分段加锁,默认有16个段,每个段表示一个Hash表,get时候不需要加锁,
大大提高了效率,put不需要加锁。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值