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不需要加锁。