JAVA基础(3)——容器(1)——常用容器分类

这篇博客介绍了JAVA基础中的容器分类,包括Collection接口的子接口List、Queue、Set,以及Map接口。文章讨论了不同容器的实现类,如ArrayList、LinkedList、HashMap、HashSet等,并提到了并发容器如ConcurrentHashMap。此外,还涵盖了Collection接口中的通用操作和default方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JAVA基础系列规划:


从元素存储的角度看,容器是存储元素的单元,这样来看,数据类型都是容器。在这里,遵从jdk的定义,将容器定义为jvm持有对象的单元。Java类库提供了一套相当完整的容器类,使用这些类的方法可以保存和操纵对象。以下内容基于jdk1.8。

1. 常用容器分类

这里写图片描述

(图片来自网络,已忘记出处,见谅)

  • 在这里,集合类分为了Map和Collection两个大的类别。
  • 图片左上角的那一块灰色里面的四个类(Dictionary、HashTable、Vector、Stack)都是线程安全的,但是它们都是JDK的老的遗留类,现在基本都不怎么使用了,都有了对应的取代类。其中Map是用来代替图片中左上角的那个Dictionary抽象类(Map的官方文档里面有说明)。官方推荐使用Map接口来代替它。同样对于HashTable,官方推荐ConcurrentHashMap来代替。接着下面的Vector是List下面的一个实现类。
  • 图片最上面的粉红色部分是集合类所有接口关系图。其中Map的结构比较简单,而Collection的结构就相对复杂一些。Collection有三个继承接口:List、Queue和Set。
  • 接下来绿色部分则是集合类的主要实现类了。这也是我们最经常使用的集合类了。
  • 最下方的一个整块都是java.util.concurrent包里面的类,按照包名我们就可以知道这个包里面的类都是用来处理Java编程中各种并发场景的

按照实现接口分类

  • 实现Map接口的有:EnumMap、IdentityHashMap、HashMap、LinkedHashMap、WeakHashMap、TreeMap
  • 实现List接口的有:ArrayList、LinkedList
  • 实现Set接口的有:HashSet、LinkedHashSet、TreeSet
  • 实现Queue接口的有:PriorityQueue、LinkedList、ArrayQueue

根据底层实现的数据结构分类

  • 底层以数组的形式实现:EnumMap、ArrayList、ArrayQueue
  • 底层以链表的形式实现:LinkedHashSet、LinkedList、LinkedHashMap
  • 底层以hash table的形式实现:HashMap、HashSet、LinkedHashMap、LinkedHashSet、WeakHashMap、IdentityHashMap
  • 底层以红黑树的形式实现:TreeMap、TreeSet
  • 底层以二叉堆的形式实现:PriorityQueue

并发容器

  • ConcurrentHashMap、ConcurrentSkipListHashMap
  • LinkedTransferQueue、CopyOnWriteArrayList、ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue、LinkedBlockDeque、DelayQueue、SynchronusQueue
  • ConcurrentSkipListSet、CopyOnWriteArraySet

2. Collection

Collection源自jdk1.2,是collection的根接口,collection代表着一组对象,这组对象就是collection的元素。

public interface Collection<E> extends Iterable<E>

在Collection接口中描述了collection操作的通用操作size、isEmpty、contains、iterator、toArray、add、remove、containsAll、addAll、removeAll、retainAll、clear、equals、hashCode,这些方法都是实现类需要实现的。jdk1.8添加了已实现的default方法removeIf、spliterator、stream、parallelStream。

关于default方法

jdk1.8开始,接口中可以添加已实现的方法,这种方法叫default方法。default方法的含义是当一个类实现一个接口的时候,它可以实现接口中的default方法,但这不是必须的。多继承时,default方法名和其他接口中方法名相同时,必须在实现类中实现该方法名的方法。

Iterable接口从jdk1.5出现,描述了遍历的通用操作iterator,同时在jdk1.8添加了default方法forEach、spliterator。

jdk并不提供对Collection的直接实现,而是对Collection进行了细分,提供更加细化的子接口List、Queue、Set。

2.1 List容器接口

List中的数据有序且可以重复,可随机存取数据。其接口:

public interface List<E> extends Collection<E>

描述了方法:

add(E): boolean
add(int, E): void
addAll(Collection<? extends E>): boolean
addAll(int, Collection<? extends E>): boolean
clear(): void
contains(Object): boolean
containsAll(Collection<?>): boolean
equals(Object): boolean
get(int): E
hashCode(): int
indexOf(Object): int
isEmpty(): boolean
iterator(): Iterator<E>
lastIndexOf(Object): int
listIterator(): ListIterator<E>
listIterator(int): ListIterator<E>
remove(int): E
remove(Object): boolean
removeAll(Collection<?>): boolean
replaceAll(UnaryOperator<E>): void
retainAll(Collection<?>): boolean
set(int, E): E
size(): int
sort(Comparator<? super E>): void
spliterator(): Spliterator<E>
subList(int, int): List<E>
toArray(): Object[]
toArray(T[]): T[]

2.2 Queue容器接口

Queue是先进先出的队列接口:

public interface Queue<E> extends Collection<E>

描述了方法:

add(E): boolean
element(): E
offer(E): boolean
peek(): E
poll(): E
remove(): E

为了更清晰的表达Queue的语义,存在一些和Collection重复的定义。

2.3 Set容器接口

Set是无序集合的接口:

public interface Set<E> extends Collection<E>

描述了方法:

add(E): boolean
addAll(Collection<? extends E>): boolean
clear(): void
contains(Object): boolean
containsAll(Collection<?>): boolean
equals(Object): boolean
hashCode(): int
isEmpty(): boolean
iterator(): Iterator<E>
remove(Object): boolean
removeAll(Collection<?>): boolean
retainAll(Collection<?>): boolean
size(): int
spliterator(): Spliterator<E>
toArray(): Object[]
toArray(T[]): T[]

3. Map

Map是Map层级结构中的根接口,维护键/值对,描述不重复的一对一的键到值的映射。
Map 接口提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。
将可变对象用作映射键时必须格外小心,最好不要这样使用。

其接口为:

public interface Map<K,V>

主要描述映射关系的操作:

clear(): void
compute(K, BiFunction<? super K, ? super V, ? extends V>): V
computeIfAbsent(K, Function<? super K, ? extends V>): V
computeIfPresent(K, BiFunction<? super K, ? super V, ? extends V>): V
containsKey(Object): boolean
containsValue(Object): boolean
entrySet(): Set<Entry<K, V>>
equals(Object): boolean
forEach(BiConsumer<? super K, ? super V>): void
get(Object): V
getOrDefault(Object, V): V
hashCode(): int
isEmpty(): boolean
keySet(): Set<K>
merge(K, V, BiFunction<? super V, ? super V, ? extends V>): V
put(K, V): V
putAll(Map<? extends K, ? extends V>): void
putIfAbsent(K, V): V
remove(Object): V
remove(Object, Object): boolean
replace(K, V): V
replace(K, V, V): boolean
replaceAll(BiFunction<? super K, ? super V, ? extends V>): void
size(): int
values(): Collection<V>

4. Collections

Collections是容器工具类,主要提供一些排序算法。如:

List list = new ArrayList(); …
Collections.sort(list);//顺序排序
Collections.shuffle(list);//乱序
Collections.reverse(list);//逆序
Collections.binarySearch(list, obj);//二分查找返回obj在list中的位置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值