一、Collection类图
在IDEA中生成的Collection类图,实线就是继承(extens)的意思,虚线就是实现接口(implements)的意思,绿色线就是接口之间或接口与类的关系,蓝色线就是类与类之间的关系。
可以知道,Collection下有三种集合大类:List、Queue和Set。
二、先说说Collection吧
collection提供了集合常用的接口,比如size()获取集合元素个数,添加查找等,同时也提供了继承了Iterable,提供迭代器。
Collection常用方法:
1、添加方法
boolean add(Object obj) : 添加一个对象
boolean addAll(Collection c) : 添加一个集合的对象
2、删除方法
void clear() 移除所有对象
boolean remove(Object) 移除一个对象
boolean removeAll(Collection c) 移除一个集合的对象,只要有一个对象移除了,就返回true
3、判断方法
boolean contains(Object o) 判断集合是否包含该对象
boolean containsAll(Collection c) 判断集合中是否包含指定的集合对象,只有包含所有的对象,才返回 true。
boolean isEmpty() 判断集合是否为空。
4、获取方法
Iterator<E> iterator() 迭代器
5、长度功能
int size() 对象个数
6.交集功能
boolean retainAll(Collection c) 如果存在和c相同的元素,原来的collection仅保留相同的元素。如果不存在相同元素,collection会变为空。collection的元素如果没有改变则返回false,改变了则返回true。
Java 8 新方法:
boolean removeif(Predicate filter) 按照一定规则过滤集合中的对象。Predicate 用于判断对象是否符合某个条件,例:
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("123");
list.add("12");
list.add("1");
list.removeIf(s -> s.equals("123"));
list.forEach(s -> System.out.println(s));
}
三、List
List有点不一样,就是实现了ListIterator接口,可以让Iterator选择任意一个方向迭代(往前或往后),而且还能在迭代中修改list中的元素。
1. hasPrevious() 和 previous() 方法都可以实现逆向遍历。
2. add()和 set()方法可以向 List 中添加和修改元素。
常用的List的实现类
ArrayList
可以理解为这是一个动态数组,因为底层就是开辟一组连续空间用来存放数据,是线程不安全的。
LinkedList
一个双向链表,实现类Queue接口,没啥好说的,也是线程不安全。
Vector
public class Vector<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
看类继承和实现和ArrayList一样,但vector的方法用了synchronized,所以是线程安全的,但是性能上不理想,所以一般不怎么用到。
Stack
继承了Vector,也是线程安全的,实现了一个先进后出的栈。
四、Set
set的特点就是集合中的元素不重复。
HashSet
底层数据结构是哈希表(一个元素为链表的数组),HashSet 是基于 HashMap 实现的,有点像是对 HashMap 做了封装,而且只是用了 HashMap 的 key 来实现其特性。
HashSet 不允许重复,如果出现重复就覆盖,允许为空。HashSet 是线程不安全的。
TreeSet
底层数据结构是红黑树 ,TreeSet 是一个有序的集合,它的作用是提供有序的Set集合。
TreeSet的性能比HashSet差但是我们在需要排序的时候可以用TreeSet因为他是自然排序也就是升序。
LinkedHashSet
底层数据结构是由哈希表和链表组成,LinkedHashSet 是线程不安全的。
五、Queue
Queue就是一个先入先出(FIFO)的数据结构,有点不同于List和Set,它下级是Deque(双端列队)、BlockingQueue(阻塞列队)和AbstractQueue(非阻塞列队),然后才是对应的实现类。