1 Collection接口

1.1 List接口

1.1.1 ArrayList

1、 实现原理:采用动态数组对象实现,默认构造方法创建了一个空数组
2、 第一次添加元素,扩展容量为10,之后的扩充算法:原来数组大小+原来数组的一半
3、 不适合进行删除或插入操作
4、 为了防止数组动态的扩充次数过多,建议创建ArrayList时,给定初始容量
5、 线程不安全,适合在单线程访问时使用

1.1.2 Vector

1、 实现原理:采用动态数组对象实现,默认构造方法创建了一个大小为10的对象数组
2、 扩充算法:当增量小于等于0时,扩充为原来的2倍,当增量大于0时,扩充为原来数组大小+增量。
3、 不适合删除或插入操作。
4、 为了防止数组动态的扩充次数过多,建议创建Vector时,给定初始容量
5、 线程安全,适合在多线程时访问使用;效率较低。

1.1.3 LinkedList

1、 实现原理:采用双向链表结构实现
2、 适合插入,删除操作,性能高
如何选择List的具体实现?
1、 安全性问题
2、 是否频繁插入,删除操作(LinkedList)
3、 是否是存储后遍历

1.2 Set接口

1、 无序的,不保证顺序
2、 不允许重复元素

1.2.1 HashSet

1、实现原理:基于哈希表(HashMap)实现
2、不允许重复,可以有一个null
3、不保证顺序恒久不变
4、添加元素时,把元素作为HashMap的key,HashMap的value使用一个固定的Object对象
5、排除重复元素是通过equals来判断的(关键)
6、判断两个对象是否相同,先判断两个对象的hashCode是否相同(如果hashCode相同,不一定是同一个对象,如果不同,则一定不是同一个对象),如果不同,则两个对象不是用一个对象,如果相同,还要进行equals判断,如果相同是同一个对象,如果不同则不是同一个对象
7、自定义对象要认为属性值相同时为同一个对象,有这种需求时,那么我们要重写对象所在类的 hashCode和 equas方法

1.2.2 TreeSet

1、有序的,基于TreeMap(二叉树结构),对象需要比较大小,通过对象比较器来实现
2、对象比较器还可以用来去除重复元素,没有实现比较器接口,将无法添加到TreeSet集合中

猜你喜欢

转载自blog.csdn.net/qq_39448574/article/details/90051166