【JAVA集合】JAVA集合框架及其常用方法
Collection接口
add() - 将指定的元素插入到集合中
size() - 返回集合的大小
remove() - 从集合中删除指定的元素
iterator() - 返回一个迭代器以访问集合的元素
addAll() - 将指定集合的所有元素添加到集合中
removeAll() - 从集合中删除指定集合的所有元素
clear() - 删除集合中的所有元素
List接口
add() - 将元素添加到列表
addAll() - 将一个列表的所有元素添加到另一个
get() - 有助于从列表中随机访问元素
iterator() - 返回迭代器对象,该对象可用于顺序访问列表的元素
set() - 更改列表的元素
remove() - 从列表中删除一个元素
removeAll() - 从列表中删除所有元素
clear() - 从列表中删除所有元素(比removeAll()效率更高)
size() - 返回列表的长度
toArray() - 将列表转换为数组
contains() - 如果列表包含指定的元素,则返回true
ArrayList实现类
与数组不同,当我们向数组列表添加或删除元素时,数组列表(ArrayList类的对象)可以自动调整其容量。 因此,数组列表也称为动态数组。
LinkedList实现类
与 ArrayList 相比,LinkedList 的增加和删除的操作效率更高,而查找和修改的操作效率较低。
可以用LinkedList的push()、pop()、peek()实现栈。offer()、poll()、peek()实现队列。
方法 | 描述 |
---|---|
public boolean add(E e) | 链表末尾添加元素,返回是否成功,成功为 true,失败为 false。 |
public void add(int index, E element) | 向指定位置插入元素。 |
public boolean addAll(Collection c) | 将一个集合的所有元素添加到链表后面,返回是否成功,成功为 true,失败为 false。 |
public boolean addAll(int index, Collection c) | 将一个集合的所有元素添加到链表的指定位置后面,返回是否成功,成功为 true,失败为 false。 |
public void addFirst(E e) | 元素添加到头部。 |
public void addLast(E e) | 元素添加到尾部。 |
public boolean offer(E e) | 向链表末尾添加元素,返回是否成功,成功为 true,失败为 false。 |
public boolean offerFirst(E e) | 头部插入元素,返回是否成功,成功为 true,失败为 false。 |
public boolean offerLast(E e) | 尾部插入元素,返回是否成功,成功为 true,失败为 false。 |
public void clear() | 清空链表。 |
public E removeFirst() | 删除并返回第一个元素。 |
public E removeLast() | 删除并返回最后一个元素。 |
public boolean remove(Object o) | 删除某一元素,返回是否成功,成功为 true,失败为 false。 |
public E remove(int index) | 删除指定位置的元素。 |
public E poll() | 删除并返回第一个元素。 |
public E remove() | 删除并返回第一个元素。 |
public boolean contains(Object o) | 判断是否含有某一元素。 |
public E get(int index) | 返回指定位置的元素。 |
public E getFirst() | 返回第一个元素。 |
public E getLast() | 返回最后一个元素。 |
public int indexOf(Object o) | 查找指定元素从前往后第一次出现的索引。 |
public int lastIndexOf(Object o) | 查找指定元素最后一次出现的索引。 |
public E peek() | 返回第一个元素。 |
public E element() | 返回第一个元素。 |
public E peekFirst() | 返回头部元素。 |
public E peekLast() | 返回尾部元素。 |
public E set(int index, E element) | 设置指定位置的元素。 |
public Object clone() | 克隆该列表。 |
public Iterator descendingIterator() | 返回倒序迭代器。 |
public int size() | 返回链表元素个数。 |
public ListIterator listIterator(int index) | 返回从指定位置开始到末尾的迭代器。 |
public Object[] toArray() | 返回一个由链表元素组成的数组。 |
public T[] toArray(T[] a) | 返回一个由链表元素转换类型而成的数组。 |
以下情况使用 ArrayList :
频繁访问列表中的某一个元素。
只需要在列表末尾进行添加和删除元素操作。
以下情况使用 LinkedList :
你需要通过循环迭代来访问列表中的某些元素。
需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。
Queue接口
实现类
子接口
Queue接口的一些常用方法是:
add() - 将指定的元素插入队列。如果任务成功,则add()返回true,否则将引发异常。
offer() - 将指定的元素插入队列。如果任务成功,则offer()返回true,否则返回false。
element() - 返回队列的开头。如果队列为空,则引发异常。
peek() - 返回队列的开头。 如果队列为空,则返回null。
remove() - 返回并删除队列的头部。如果队列为空,则引发异常。
poll() - 返回并删除队列的开头。 如果队列为空,则返回null。
Deque接口(双端队列)
由于Deque继承了Queue接口,因此它继承了Queue接口的所有方法。
除了Queue接口中可用的方法之外,Deque界面还包括以下方法:
addFirst() - 在双端队列的开头添加指定的元素。如果双端队列已满,则引发异常。
addLast() - 在双端队列的末尾添加指定的元素。如果双端队列已满,则引发异常。
offerFirst() - 在双端队列的开头添加指定的元素。如果双端队列已满,则返回false。
offerLast() - 在双端队列的末尾添加指定的元素。如果双端队列已满,则返回false。
getFirst() - 返回双端队列的第一个元素。如果双端队列为空,则引发异常。
getLast() - 返回双端队列的最后一个元素。如果双端队列为空,则引发异常。
peekFirst() - 返回双端队列的第一个元素。如果双端队列为空,则返回null。
peekLast() - 返回双端队列的最后一个元素。如果双端队列为空,则返回null。
removeFirst() - 返回并删除双端队列的第一个元素。如果双端队列为空,则引发异常。
removeLast() - 返回并删除双端队列的最后一个元素。如果双端队列为空,则引发异常。
pollFirst() - 返回并删除双端队列的第一个元素。如果双端队列为空,则返回null。
pollLast() - 返回并删除双端队列的最后一个元素。如果双端队列为空,则返回null。
Java Collections框架的Stack类提供了堆栈的实现。
但是,建议Deque用作堆栈而不是Stack类。这是因为Stack的方法是同步的。
以下是Deque接口提供的用于实现堆栈的方法:
push() - 在双端队列的开头添加元素
pop() - 从双端队列的开头删除元素
peek() - 从双端队列的开头返回一个元素
ArrayDeque实现类
其他方法
element() - 从ArrayDeque双端队列的头部返回一个元素。
contains(element) - 在ArrayDeque双端队列中搜索指定的元素。如果找到该元素,则返回true,否则返回false。
size() - 返回ArrayDeque双端队列的长度。
toArray() - 将ArrayDeque双端队列转换为数组并返回。
clone() - 创建ArrayDeque双端队列的副本并返回它。
ArrayDeque与 LinkedList类
ArrayDeque和Java的LinkedList都实现了Deque接口。但是,它们之间存在一些差异。
- LinkedList支持空元素,而ArrayDeque不支持。
- 链表中的每个节点都包含到其他节点的链接。这就是LinkedList比ArrayDeque需要更多存储空间的原因。
- 如果要实现队列或双端队列数据结构,则ArrayDeque可能比LinkedList快。
LinkedList实现类
可通过索引号添加(add)、删除(remove)和更新(set)元素。搜索元素:indexOf() - 返回元素第一次出现的索引、lastIndexOf() - 返回元素最后一次出现的索引。
PriorityQueue实现类
BlockingQueue接口
阻塞队列(BlockingQueue)被广泛用于“生产者-消费者”问题中,其原因是 BlockingQueue 提供了可阻塞的插入和移除方法。当队列容器已满,生产者线程会被阻塞,直到队列未满;当队列容器为空时,消费者线程会被阻塞,直至队列非空时为止。
BlockingQueue 接口的实现类有 ArrayBlockingQueue、DelayQueue、LinkedBlockingDeque、LinkedBlockingQueue、LinkedTransferQueue、PriorityBlockingQueue、SynchronousQueue 等。
Set接口
Set接口中还提供了Collection接口的一些常用方法:
add() - 将指定的元素添加到集合中
addAll() - 将指定集合的所有元素添加到集合中
iterator() -返回一个迭代器,该迭代器可用于顺序访问集合中的元素
remove() - 从集合中移除指定的元素
removeAll() - 从存在于另一个指定集合中的集合中删除所有元素
keepAll() -保留集合中所有还存在于另一个指定集合中的所有元素
clear() - 从集合中删除所有元素
size() - 返回集合的长度(元素数)
toArray() - 返回包含集合中所有元素的数组
contains() - 如果集合包含指定的元素,则返回true
containsAll() - 如果集合包含指定集合的所有元素,则返回true
hashCode() -返回哈希码值(集合中元素的地址)
Union - 为了得到两个集合x和y的并集,我们可以使用x.addAll(y)
Intersection - 要获得两个集合x和y的交集,我们可以使用x.retainAll(y)
Subset - 要检查x是否是y的子集,我们可以使用y.containsAll(x)
HashSet实现类
LinkedHashSet实现类
SortedSet接口--TreeSet实现类
Map接口
常用方法
public V put(K key, V value):把指定的键与指定的值添加到Map集合中。
public V remove(Object key):把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。
public V get(Object key):根据指定的键,在Map集合中获取对应的值。
boolean containsKey(Object key):判断集合中是否包含指定的键。
public Set
public Set<Map.Entry<K,V>> entrySet():获取到Map集合中所有的键值对对象的集合(Set集合)。
HashMap实现类
LinkedHashMap实现类
TreeMap实现类
有序集合