一、集合框架介绍
java集合框架,又被称为容器,是定义在Java.Util包中一组接口及其实现类,,用于存储数据进行增删查改(CRUD)等操作。
使用集合框架有助于便捷快速的写出高效、稳定的代码,每一个集合背后都有对应的数据结构。
二、接口关系说明
Java集合分为Collction和Map两大接口
1.Iterable接口
迭代器,提供foreach()遍历集合元素的功能。
2.Collection集合
储存管理一组对象(Object),这些对象称为元素(elements),实现Iterable接口。
特点:一次储存一个元素,单列集合。
修饰符和返回类型 | 方法 | 用途 |
---|---|---|
boolean | add(E e) | 向集合中添加元素 |
boolean | addAll(Collection<? extends E> c) | 将指定集合中的所有元素添加到此集合(可选操作) |
void | clear() | 从此集合中删除所有元素(可选操作) |
boolean | contains(Object o) | 如果此集合包含指定的元素,则返回 true |
boolean | containsAll(Collection<?> c) | 如果此集合包含指定集合中的所有元素,则返回 true。 |
boolean | equals(Object o) | 将指定的对象与此集合进行比较以确定相等性。 |
int | hashCode() | 返回此集合的哈希代码值。 |
boolean | isEmpty() | 如果此集合不包含任何元素,则返回 true。 |
Iterator | iterator() | 返回对此集合中元素的迭代器。 |
default Stream | parallelStream() | 返回可能与此集合作为其源的并行集合。Stream |
boolean | remove(Object o) | 从此集合中删除指定元素的单个实例(如果存在)(可选操作)。 |
boolean | removeAll(Collection<?> c) | 删除此集合的所有元素,这些元素也包含在指定的集合中(可选操作)。 |
default boolean | removeIf(Predicate<? super E> filter) | 删除此集合中满足给定谓词的所有元素。 |
boolean | retainAll(Collection<?> c) | 仅保留此集合中包含在指定集合中的元素(可选操作)。 |
int | size() | 返回此集合中元素的数目。 |
default Spliterator | spliterator() | 在此集合中的元素上创建拆分器。 |
default Stream | stream() | 返回一个以此集合作为其源的顺序。Stream |
Object[] | toArray() | 返回一个数组,其中包含此集合中的所有元素。 |
(1)List线性表
应用场景:需要快速查询的场景、消息队列、排行榜等。
Collection派生出的子接口,代表有序可重复集合,线性结构。
AbstractList抽象类:实现List接口,派生出Vector(动态数组)、Stack(栈)、ArrayList(顺序表)、LinkedList(链表)实现类,LinkedList可以作为双链表,也可以作为普通队列(Queue)或作为双端队列(Deque)的实现类。
Queue队列:Collection派生出的子接口,队列结构,元素只能从队尾入队,队头出队。
Deque:Queue派生出的子接口,双端队列,元素既可以队头进队头出,也可以队尾进队尾出。
PriorityQueue:Queue接口的实现类,代表优先级队列,二叉树结构,每个元素都具备优先级,根据优先级入队出队。
(2)Set集合
应用场景:数据重组,数据储存。
Collection派生出的子接口,代表不可重复元素的集合。
SortedSet:Set派生出的子接口,具备Set的功能,可以在放入元素的时候排序。
HashSet:Set接口实现类,哈希表结构,集合内元素无序。
TreeSet:SortedSet接口的实现类,红黑树结构,集合内元素有序。
3.Map集合
采用键值对Map<K,V>的方式存储元素,保存具有映射关系的数据,Map集合存储两组具有对应关系的值key、Value,key值可以为null,不可以重复,如果添加key-value对时Map中已经有重复的key,则新添加的value会覆盖该key原来对应的value。常用实现类有HashMap、LinkedHashMap、TreeMap等。
修饰符和返回类型 | 方法 | 用途 |
---|---|---|
V | get(Object k) | 根据指定的key查找对应的value |
V | getOrDefault(Object k, V defaultvalue) | 根据指定的key查找对应的value,若没有则用默认值代替 |
V | put(K key, V value) | 将指定的 k-v 放入 Map |
boolean | containsKey(object key) | 判断是否包含key |
boolean | containsValue(object value) | 判断是否包含value |
Set<Map.Entry<K, V>> | entrySet() | 返回所有键值对 |
int | size() | 返回键值对数目 |
(1)SortMap
Map派生出的子接口,有序键值对,可以应用于查找/搜索。
TreeMap:SortMap实现类,红黑树数据结构,每个键值对key-value作为红黑树的一个节点,TreeMap存储key-Map对时需要根据key对节点进行排序。
TreeMap的两种排序方式:
—自然排序:TreeMap的所有key实现Comparable接口,而且所有的key应该是同一个类的对象,否则会抛出ClassCastException。
—定制排序:创建TreeMap时,传入一个Comparator对象,该对象负责对TreeMap中的所有key进行排序。