【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 keySet():获取Map集合中所有的键,存储到Set集合中。
public Set<Map.Entry<K,V>> entrySet():获取到Map集合中所有的键值对对象的集合(Set集合)。

HashMap实现类

LinkedHashMap实现类

TreeMap实现类

有序集合

posted @ 2024-06-30 15:20  hudad  阅读(10)  评论(0编辑  收藏  举报