一、集合类的继承体系
简单说明:虚线框里填的都是接口类型,而实线框填写都是具体的实现类
二、特点
Collection:
单列集合的根接口,其子接口有List和Set,List特点是有序可重复,Set的特点是无须不重复。其中,ArrayList集合查询速度快,但是删除元素效率低,而Linked List集合插入删除元素快
Map:
双列集合的根接口,用于存储具有键(Key)、值(Value)映射关系的元素
无序、以键值对的形式添加元素,键不能重复,值可以重复,它没有继承Collection接口
1.遍历
先取出保存所有键的Set,再遍历Set即可(2种)
先取出保存所有Entry的Set,再遍历此Set即可
2.HashMap与Hashtable之间的区别
HashMap非同步 线程不安全,只允许一条记录的键为NULL
Hashtable同步 线程安全 同步既排队
TreeMap不允许键为NULL
三、Collection接口
Modifier and Type | 方法 | 描述 | |
---|---|---|---|
1 | boolean | add(E e) | 确保此集合包含指定的元素(可选操作)。 |
2 | boolean | addAll(Collection<? extends E> c) | 将指定集合中的所有元素添加到此集合(可选操作)。 |
3 | void | clear() | 从此集合中删除所有元素(可选操作)。 |
4 | boolean | contains(Object o) | 如果此集合包含指定的元素,则返回 |
5 | boolean | containsAll(Collection<?> c) | 如果此集合包含指定集合中的所有元素,则返回 |
6 | boolean | isEmpty() | 如果此集合不包含元素,则返回 |
7 | abstract Iterator<E> | iterator() | 返回包含在该集合中的元素的迭代器。 |
8 | boolean | remove(Object o) | 从该集合中删除指定元素的单个实例(如果存在)(可选操作)。 |
9 | boolean | removeAll(Collection<?> c) | 删除指定集合中包含的所有此集合的元素(可选操作)。 |
10 | boolean | retainAll(Collection<?> c) | 仅保留此集合中包含在指定集合中的元素(可选操作)。 |
11 | abstract int | size() | 返回此集合中的元素数。 |
12 | Object[] | toArray() | 返回一个包含此集合中所有元素的数组。 |
13 | <T> T[] | toArray(T[] a) | 返回一个包含此集合中所有元素的数组; 返回的数组的运行时类型是指定数组的运行时类型。 |
14 | String | toString() | 返回此集合的字符串表示形式。 |
List接口
List接口继承了Collection接口,特点是:可以通过索引来访问元素,并且元素有序,存入顺序和取出顺序是一致的。
Modifier and Type | 方法 | 描述 | |
---|---|---|---|
1 | void | add(int index, E element) | 将指定的元素插入此列表中的指定位置(可选操作)。 |
2 | boolean | add(E e) | 将指定的元素追加到此列表的末尾(可选操作)。 |
3 | boolean | addAll(int index, Collection<? extends E> c) | 将指定集合中的所有元素插入到此列表中的指定位置(可选操作)。 |
4 | boolean | addAll(Collection<? extends E> c) | 按指定集合的迭代器(可选操作)返回的顺序将指定集合中的所有元素附加到此列表的末尾。 |
5 | void | clear() | 从此列表中删除所有元素(可选操作)。 |
6 | boolean | contains(Object o) | 如果此列表包含指定的元素,则返回 |
7 | boolean | containsAll(Collection<?> c) | 如果此列表包含指定集合的所有元素,则返回 |
8 | boolean | equals(Object o) | 将指定的对象与此列表进行比较以获得相等性。 |
9 | E | get(int index) | 返回此列表中指定位置的元素。 |
10 | int | hashCode() | 返回此列表的哈希码值。 |
11 | int | indexOf(Object o) | 返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。 |
12 | boolean | isEmpty() | 如果此列表不包含元素,则返回 |
13 | Iterator<E> | iterator() | 以正确的顺序返回该列表中的元素的迭代器。 |
14 | int | lastIndexOf(Object o) | 返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。 |
15 | ListIterator<E> | listIterator() | 返回列表中的列表迭代器(按适当的顺序)。 |
16 | ListIterator<E> | listIterator(int index) | 从列表中的指定位置开始,返回列表中的元素(按正确顺序)的列表迭代器。 |
17 | static <E> List<E> | of() | 返回包含零个元素的不可变列表。 |
18 | static <E> List<E> | of(E e1) | 返回一个包含一个元素的不可变列表。 |
19 | static <E> List<E> | of(E... elements) | 返回包含任意数量元素的不可变列表。 |
20 | static <E> List<E> | of(E e1, E e2) | 返回一个包含两个元素的不可变列表。 |
21 | E | remove(int index) | 删除该列表中指定位置的元素(可选操作)。 |
22 | boolean | remove(Object o) | 从列表中删除指定元素的第一个出现(如果存在)(可选操作)。 |
23 | boolean | removeAll(Collection<?> c) | 从此列表中删除包含在指定集合中的所有元素(可选操作)。 |
24 | default void | replaceAll(UnaryOperator<E> operator) | 将该列表的每个元素替换为将该运算符应用于该元素的结果。 |
25 | boolean | retainAll(Collection<?> c) | 仅保留此列表中包含在指定集合中的元素(可选操作)。 |
26 | E | set(int index, E element) | 用指定的元素(可选操作)替换此列表中指定位置的元素。 |
27 | int | size() | 返回此列表中的元素数。 |
28 | default void | sort(Comparator<? super E> c) | 根据指定的 |
29 | default Spliterator<E> | spliterator() | 在此列表中的元素上创建一个 |
30 | List<E> | subList(int fromIndex, int toIndex) | 返回指定的 |
31 | Object[] | toArray() | 以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的数组。 |
32 | <T> T[] | toArray(T[] a) | 以正确的顺序返回一个包含此列表中所有元素的数组(从第一个到最后一个元素); 返回的数组的运行时类型是指定数组的运行时类型。 |
ArrayList
正是因为其内部存储形式是以数组形式储存,在增加和删除元素,会重新创建新的数组,效率比较低,因此不适合做大量的增删操作。但是这种数组结构可以通过索引的方式进行访问元素,所以适合遍历和查找元素。
Modifier and Type | 方法 | 描述 | |
---|---|---|---|
1 | Object | clone() | 返回此 |
2 | void | ensureCapacity(int minCapacity) | 如果需要,增加此 |
3 | void | forEach(Consumer<? super E> action) | 对 |
4 | E | get(int index) | 返回此列表中指定位置的元素。 |
5 | int | indexOf(Object o) | 返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。 |
6 | boolean | isEmpty() | 如果此列表不包含元素,则返回 |
7 | Iterator<E> | iterator() | 以正确的顺序返回该列表中的元素的迭代器。 |
int | lastIndexOf(Object o) | 返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。 | |
ListIterator<E> | listIterator() | 返回列表中的列表迭代器(按适当的顺序)。 | |
ListIterator<E> | listIterator(int index) | 从列表中的指定位置开始,返回列表中的元素(按正确顺序)的列表迭代器。 | |
E | remove(int index) | 删除该列表中指定位置的元素。 | |
boolean | remove(Object o) | 从列表中删除指定元素的第一个出现(如果存在)。 | |
boolean | removeAll(Collection<?> c) | 从此列表中删除指定集合中包含的所有元素。 | |
boolean | removeIf(Predicate<? super E> filter) | 删除满足给定谓词的此集合的所有元素。 | |
protected void | removeRange(int fromIndex, int toIndex) | 从此列表中删除所有索引为 | |
void | replaceAll(UnaryOperator<E> operator) | 将该列表的每个元素替换为将该运算符应用于该元素的结果。 | |
boolean | retainAll(Collection<?> c) | 仅保留此列表中包含在指定集合中的元素。 | |
E | set(int index, E element) | 用指定的元素替换此列表中指定位置的元素。 | |
int | size() | 返回此列表中的元素数。 | |
void | sort(Comparator<? super E> c) | 根据指定的 | |
Spliterator<E> | spliterator() | 在此列表中的元素上创建late-binding和故障快速 | |
List<E> | subList(int fromIndex, int toIndex) | 返回指定的 | |
Object[] | toArray() | 以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的数组。 | |
<T> T[] | toArray(T[] a) | 以正确的顺序返回一个包含此列表中所有元素的数组(从第一个到最后一个元素); 返回的数组的运行时类型是指定数组的运行时类型。 | |
void | trimToSize() | 修改这个 |
LinkedList
该集合的元素是链表的形式储存,有Node类型的first和last属性维护一个双向循环链表,每个元素都用引用的的方式及逆行记住前面一个和后面一个元素,这种方式有利于进行对元素的增删操作。
Modifier and Type | 方法 | 描述 | |
---|---|---|---|
1 | void | add(int index,E element) | 添加到指定位置 |
2 | void | addFirst(Object o) | 插入表头 |
3 | void | addLast(Object o) | 插入表尾 |
4 | Object | getFirst() | 返回表头 |
5 | Object | getLast() | 返回表尾 |
6 | Object | removeFirst() | 移除表头 |
7 | Object | removeLast() | 移除表尾 |
Set接口
Set接口和List接口一样,同样继承了Collection接口,它与Collection接口的基本方法是一致的,功能上没有什么扩充的,只是变的更加严格了。
Set接口中元素的特点:无序不重复
Set接口的两个实现类:HashSet和TreeSet。HashSet是根据元素的哈希值来确定储存位置,具有良好的存取和查找性能,而TreeSet是以二叉树进行存储的,可以实现对集合元素的排序
HashSet集合
它储存的的元素是不重复的,并且元素的顺序是无序的,,当向HashSet集合添加一个元素时,其流程如下:
为了能保证正常工作,都会要求重写hashCode() 和equals(),实现请看 HashSet集合
TreeSet集合
采用平衡二叉树来储存元素,这样的结构可以保
四、Map接口
Map接口时一种双列集合,它的每个元素都包含一个键对象Key和值对象Value,键和值存在一种对应关系,称为映射。
Modifier and Type | 方法 | 描述 | |
---|---|---|---|
1 | void | clear() | 从该地图中删除所有的映射(可选操作)。 |
2 | default V | compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction) | 尝试计算指定键的映射及其当前映射值(如果没有当前映射,则 |
3 | default V | computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction) | 如果指定的键尚未与值相关联(或映射到 |
4 | default V | computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction) | 如果指定的密钥的值存在且非空,则尝试计算给定密钥及其当前映射值的新映射。 |
5 | boolean | containsKey(Object key) | 如果此映射包含指定键的映射,则返回 |
6 | boolean | containsValue(Object value) | 如果此映射将一个或多个键映射到指定的值,则返回 |
7 | static <K,V> Map.Entry<K,V> | entry(K k, V v) | 返回包含给定键和值的不可变 |
8 | Set<Map.Entry<K,V>> | entrySet() | 返回此地图中包含的映射的 |
9 | boolean | equals(Object o) | 将指定的对象与此映射进行比较以获得相等性。 |
10 | default void | forEach(BiConsumer<? super K,? super V> action) | 对此映射中的每个条目执行给定的操作,直到所有条目都被处理或操作引发异常。 |
11 | V | get(Object key) | 返回指定键映射到的值,如果此映射不包含该键的映射,则返回 |
12 | default V | getOrDefault(Object key, V defaultValue) | 返回指定键映射到的值,如果此映射不包含该键的映射,则返回 |
13 | int | hashCode() | 返回此地图的哈希码值。 |
14 | boolean | isEmpty() | 如果此映射不包含键值映射,则返回 |
15 | Set<K> | keySet() | 返回此地图中包含的键的 |
16 | default V | merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction) | 如果指定的键尚未与值相关联或与null相关联,则将其与给定的非空值相关联。 |
static <K,V> Map<K,V> | of() | 返回一个包含零映射的不可变地图。 | |
static <K,V> Map<K,V> | of(K k1, V v1) | 返回包含单个映射的不可变地图。 | |
static <K,V> Map<K,V> | ofEntries(Map.Entry<? extends K,? extends V>... entries) | 返回包含从给定条目提取的键和值的不可变地图。 | |
V | put(K key, V value) | 将指定的值与该映射中的指定键相关联(可选操作)。 | |
void | putAll(Map<? extends K,? extends V> m) | 将指定地图的所有映射复制到此映射(可选操作)。 | |
default V | putIfAbsent(K key, V value) | 如果指定的键尚未与值相关联(或映射到 | |
V | remove(Object key) | 如果存在(从可选的操作),从该地图中删除一个键的映射。 | |
default boolean | remove(Object key, Object value) | 仅当指定的密钥当前映射到指定的值时删除该条目。 | |
default V | replace(K key, V value) | 只有当目标映射到某个值时,才能替换指定键的条目。 | |
default boolean | replace(K key, V oldValue, V newValue) | 仅当当前映射到指定的值时,才能替换指定键的条目。 | |
default void | replaceAll(BiFunction<? super K,? super V,? extends V> function) | 将每个条目的值替换为对该条目调用给定函数的结果,直到所有条目都被处理或该函数抛出异常。 | |
int | size() | 返回此地图中键值映射的数量。 | |
Collection<V> | values() | 返回此地图中包含的值的 |
HashSet集合是Map接口的一个实现类,用于存储键值映射的关系,但是必须保证不能出现重复的键(键相同,值覆盖)。
Map集合中还有一格实现类Hashtable,它和HashMap十分相似,区别在于Hashtable是线程安全。Hashtable存取元素很慢,目前基本上被HashMap类所取代了,但是Hashtable集合有个子类Properties,在实际应用中挺重要的。