Java集合
1、体系图
2、Iterable
Iterable 是接口
实现这个接口允许对象成为 “foreach” 语句的目标。
所有的容器对象,只要实现了Iterable,遍历容器中元素的时候都可以使用foreach循环
3、Collection
Collection 有两个子接口:List和Set
Collection 表示一组对象,里面的每一个对象称为元素。
一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。
4、List
有序的 collection,对列表中每个元素的插入位置进行精确地控制
先插入的再前面,后插入的在后面【不是按照大小顺序,是按照插入的先后顺序】
用户可以根据元素的整数索引(在列表中的位置)访问元素
允许有重复的元素
5、ArrayList
ArrayList 是实现List接口的,底层采用数组实现。
ArrayList 实现了Cloneable接口,即覆盖了函数clone(),能被克隆。
ArrayList 实现java.io.Serializable接口,这意味着ArrayList支持序列化,能通过序列化去传输。
ArrayList 采用异步处理线程不安全,性能较高
ArrayList 集合中允许null的存在
ArrayList 查询快,插入和删除慢
6、Vector
Vector与ArrayList基本相同,但Vector是线程安全相对于ArrayList性能较低,采用synchronized修饰增删查改方法,一般不建议使用
7、LinkedList
LinkedList 是一个继承于AbstractSequentialList的双向链表。
LinkedList 可以被当作堆栈、队列或双端队列进行操作。
LinkedList 实现 List 接口,所以能对它进行队列操作。
LinkedList 实现 Deque 接口,能将LinkedList当作双端队列使用。
LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆。
LinkedList 实现java.io.Serializable接口,所以LinkedList支持序列化,能通过序列化去传输。
LinkedList 是非同步的。
LinkedList 集合中允许null的存在
LinkedList 查询慢,插入和删除快
8、Set
无序的 collection,不能通过索引操作元素
只可以使用Iterator迭代器
Set不允许出现重复元素,在判断重复元素的时候,Set集合会调用hashCode()和equal()方法来实现。
9、HashSet
HashSet 底层是HashMap,HashMap底层是数组,所以HashSet最底层也是数组
HashSet 根据hashCode运算的下标进行排序
HashSet 去重规则,先判断hashCode,如果hashCode相同,再判断equals,如果equals返回true,则判断两个元素相等
HashSet 集合中允许null值的存在
10、TreeSet
TreeSet 底层是二叉树,提高了排序效率
TreeSet 元素要么可以自然排序,要么需要传入一个比较器对象。自然排序的话调用元素的compareTo方法进行排序,比较器的话调用比较器的compare方法进行排序
TreeSet 去重规则,compare方法或者compareTo方法返回0,认为两个元素相等
TreeSet 集合中不允许null值的存在