蓝桥杯JAVA-9.集合(容器)在竞赛中的快速入门使用
本文最后更新于:December 19, 2021 pm
积土成山,风雨兴焉;积水成渊,蛟龙生焉;积善成德,而神明自得,圣心备焉。故不积跬步,无以至千里,不积小流无以成江海。齐骥一跃,不能十步,驽马十驾,功不在舍。面对悬崖峭壁,一百年也看不出一条裂缝来,但用斧凿,能进一寸进一寸,能进一尺进一尺,不断积累,飞跃必来,突破随之。
目录
之前写了一篇关于JAVA中集合的使用,但后面感觉写的可能太多、太杂了。所以,这一篇就直接写怎么用,类似于基本的操作增、删、查、改。
1.Collection
Java标准库自带的java.util包提供了集合类:Collection,它是除Map外所有其他集合类的根接口。Java的java.util包主要提供了以下三种类型的集合:
- List:一种有序列表的集合。
- Set:一种保证没有重复元素的集合。
- Map:一种通过键值(key-value)查找的映射表集合。
1.1 List
Modifier and Type | Method and Description |
---|---|
boolean |
add(E e) 将指定的元素追加到此列表的末尾(可选操作)。 |
void |
add(int index, E element) 将指定的元素插入此列表中的指定位置(可选操作)。 |
boolean |
addAll(Collection<? extends E> c) 按指定集合的迭代器(可选操作)返回的顺序将指定集合中的所有元素附加到此列表的末尾。 |
boolean |
addAll(int index, Collection<? extends E> c) 将指定集合中的所有元素插入到此列表中的指定位置(可选操作)。 |
void |
clear() 从此列表中删除所有元素(可选操作)。 |
boolean |
contains(Object o) 如果此列表包含指定的元素,则返回 true 。 |
boolean |
containsAll(Collection<?> c) 如果此列表包含指定 集合的 所有元素,则返回true。 |
boolean |
equals(Object o) 将指定的对象与此列表进行比较以获得相等性。 |
E |
get(int index) 返回此列表中指定位置的元素。 |
int |
hashCode() 返回此列表的哈希码值。 |
int |
indexOf(Object o) 返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。 |
boolean |
isEmpty() 如果此列表不包含元素,则返回 true 。 |
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) 从此列表中删除包含在指定集合中的所有元素(可选操作)。 |
default void |
replaceAll(UnaryOperator<E> operator) 将该列表的每个元素替换为将该运算符应用于该元素的结果。 |
boolean |
retainAll(Collection<?> c) 仅保留此列表中包含在指定集合中的元素(可选操作)。 |
E |
set(int index, E element) 用指定的元素(可选操作)替换此列表中指定位置的元素。 |
int |
size() 返回此列表中的元素数。 |
default void |
sort(Comparator<? super E> c) 使用随附的 Comparator 排序此列表来比较元素。 |
default Spliterator<E> |
spliterator() 在此列表中的元素上创建一个Spliterator 。 |
List<E> |
subList(int fromIndex, int toIndex) 返回此列表中指定的 fromIndex (含)和 toIndex 之间的视图。 |
Object[] |
toArray() 以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的数组。 |
<T> T[] |
toArray(T[] a) 以正确的顺序返回一个包含此列表中所有元素的数组(从第一个到最后一个元素); 返回的数组的运行时类型是指定数组的运行时类型。 |
1 |
|
1.2 Set
Modifier and Type | Method and Description |
---|---|
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<E> |
iterator() 返回此集合中元素的迭代器。 |
boolean |
remove(Object o) 如果存在,则从该集合中删除指定的元素(可选操作)。 |
boolean |
removeAll(Collection<?> c) 从此集合中删除指定集合中包含的所有元素(可选操作)。 |
boolean |
retainAll(Collection<?> c) 仅保留该集合中包含在指定集合中的元素(可选操作)。 |
int |
size() 返回此集合中的元素数(其基数)。 |
default Spliterator<E> |
spliterator() 在此集合中的元素上创建一个 Spliterator 。 |
Object[] |
toArray() 返回一个包含此集合中所有元素的数组。 |
<T> T[] |
toArray(T[] a) 返回一个包含此集合中所有元素的数组; 返回的数组的运行时类型是指定数组的运行时类型。 |
1 |
|
2.Map
Modifier and Type | Method and Description |
---|---|
void |
clear() 从该地图中删除所有的映射(可选操作)。 |
default V |
compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction) 尝试计算指定键的映射及其当前映射的值(如果没有当前映射, null )。 |
default V |
computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction) 如果指定的键尚未与值相关联(或映射到 null ),则尝试使用给定的映射函数计算其值,并将其输入到此映射中,除非 null 。 |
default V |
computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction) 如果指定的密钥的值存在且非空,则尝试计算给定密钥及其当前映射值的新映射。 |
boolean |
containsKey(Object key) 如果此映射包含指定键的映射,则返回 true 。 |
boolean |
containsValue(Object value) 如果此地图将一个或多个键映射到指定的值,则返回 true 。 |
Set<Map.Entry<K,V>> |
entrySet() 返回此地图中包含的映射的Set 视图。 |
boolean |
equals(Object o) 将指定的对象与此映射进行比较以获得相等性。 |
default void |
forEach(BiConsumer<? super K,? super V> action) 对此映射中的每个条目执行给定的操作,直到所有条目都被处理或操作引发异常。 |
V |
get(Object key) 返回到指定键所映射的值,或 null 如果此映射包含该键的映射。 |
default V |
getOrDefault(Object key, V defaultValue) 返回到指定键所映射的值,或 defaultValue 如果此映射包含该键的映射。 |
int |
hashCode() 返回此地图的哈希码值。 |
boolean |
isEmpty() 如果此地图不包含键值映射,则返回 true 。 |
Set<K> |
keySet() 返回此地图中包含的键的Set 视图。 |
default V |
merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction) 如果指定的键尚未与值相关联或与null相关联,则将其与给定的非空值相关联。 |
V |
put(K key, V value) 将指定的值与该映射中的指定键相关联(可选操作)。 |
void |
putAll(Map<? extends K,? extends V> m) 将指定地图的所有映射复制到此映射(可选操作)。 |
default V |
putIfAbsent(K key, V value) 如果指定的键尚未与某个值相关联(或映射到 null )将其与给定值相关联并返回 null ,否则返回当前值。 |
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() 返回此地图中包含的值的Collection 视图。 |
1 |
|
3.其他
3.1 Map.Entry
一个Java中类似于C++中的Pair的容器。Map.Entry是Map的一个内部接口。配合Map使用。
主要的三个方法。
- K getKey():
- V getValue():
- V setValue(V value)
1 |
|
1 |
|
3.2 Stack(栈)
返回值 | 方法描述 |
---|---|
boolean |
empty() 测试此堆栈是否为空。 |
E |
peek() 查看栈顶元素。 |
E |
pop() 删除栈顶元素,并将该元素作为返回值返回。 |
E |
`push(E item)添加元素到堆栈的顶部。与addElement(item)效果完全相同。 |
int |
search(Object o) 返回一个对象在此堆栈上的基于1的位置。 |
1 |
|
3.3 Queue(队列)
Queue的6个方法分类:
- 压入元素(添加):add()、offer()
相同:未超出容量,从队尾压入元素,并返回压入的元素。
区别:在超出容量时,add()方法会对抛出异常,offer()返回false - 弹出元素(删除):remove()、poll()
相同:容量大于0的时候,删除并返回队头元素。
区别:在容量为0的时候,remove()会抛出异常,poll()返回false - 获取队头元素(不删除):element()、peek()
相同:容量大于0的时候,都返回队头元素。但是不删除。
区别:容量为0的时候,element()会抛出异常,peek()返回null。
LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。
1 |
|
3.4 Deque(双端队列)
Deque是一个双端队列接口,继承自Queue接口,Deque的实现类是LinkedList、ArrayDeque、LinkedBlockingDeque,其中LinkedList是最常用的。
注意:Java堆栈Stack类已经过时,Java官方推荐使用Deque替代Stack使用。Deque堆栈操作方法:push()、pop()、peek()。
Deque有三种用途:
- 普通队列(一端进另一端出):
Queue queue = new LinkedList()或Deque deque = new LinkedList() - 双端队列(两端都可进出)
Deque deque = new LinkedList() - 堆栈
Deque deque = new LinkedList()
- 在将双端队列用作队列时,将得到 FIFO(先进先出)行为。将元素添加到双端队列的末尾,从双端队列的开头移除元素。
Queue方法 | 等效Deque方法 |
---|---|
add(e) | addLast(e) |
offer(e) | offerLast(e) |
remove() | removeFirst() |
poll() | pollFirst() |
element() | getFirst() |
peek() | peekFirst() |
- 双端队列也可用作 LIFO(后进先出)堆栈。应优先使用此接口而不是遗留 Stack 类。在将双端队列用作堆栈时,元素被推入双端队列的开头并从双端队列开头弹出。
堆栈方法 | 等效Deque方法 |
---|---|
push(e) | addFirst(e) |
pop() | removeFirst() |
peek() | peekFirst() |
当作普通队列,就用普通队列的方法,当作双端队列就用双端队列的方法,当作堆栈就用堆栈的方法。
3.5 PriorityQueue(优先队列)
返回值 | 方法描述 |
---|---|
boolean |
add(E e) 将指定的元素插入到此优先级队列中。 |
void |
clear() 从此优先级队列中删除所有元素。 |
Comparator<? super E> |
comparator() 返回用于为了在这个队列中的元素,或比较null 如果此队列根据所述排序natural ordering的元素。 |
boolean |
contains(Object o) 如果此队列包含指定的元素,则返回 true 。 |
Iterator<E> |
iterator() 返回此队列中的元素的迭代器。 |
boolean |
offer(E e) 将指定的元素插入到此优先级队列中。 |
E |
peek() 检索但不删除此队列的头,如果此队列为空,则返回 null 。 |
E |
poll() 检索并删除此队列的头,如果此队列为空,则返回 null 。 |
boolean |
remove(Object o) 从该队列中删除指定元素的单个实例(如果存在)。 |
int |
size() 返回此集合中的元素数。 |
Spliterator<E> |
spliterator() 在此队列中的元素上创建*late-binding和失败快速* Spliterator 。 |
Object[] |
toArray() 返回一个包含此队列中所有元素的数组。 |
<T> T[] |
toArray(T[] a) 返回一个包含此队列中所有元素的数组; 返回的数组的运行时类型是指定数组的运行时类型。 |
常用方法:
1 |
|
1 |
|
自定义类:
1 |
|
优先队列遍历。PriorityQueue的iterator()不保证以任何特定顺序遍历队列元素。若想按特定顺序遍历,先将队列转成数组,然后排序遍历
1 |
|
比较器生降序说明
1 |
|
详细自定义比较器的返回值如何理解,可见《蓝桥杯JAVA-3.自定义排序、进制转换、保留小数位数 》
3.6 Pair(JDK9)
获取Key值:getKey()。
获取Value值:getValue()。
1 |
|
说明
offer,add 区别:
一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝。
这时新的 offer 方法就可以起作用了。它不是对调用 add() 方法抛出一个 unchecked 异常,而只是得到由 offer() 返回的 false。
poll,remove 区别:
remove() 和 poll() 方法都是从队列中删除第一个元素。remove() 的行为与 Collection 接口的版本相似, 但是新的 poll() 方法在用空集合调用时不是抛出异常,只是返回 null。因此新的方法更适合容易出现异常条件的情况。
peek,element区别:
element() 和 peek() 用于在队列的头部查询元素。与 remove() 方法类似,在队列为空时, element() 抛出一个异常,而 peek() 返回 null。
本文作者: 墨水记忆
本文链接: https://tothefor.com/DragonOne/9086b1cd.html
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!