java 四类-集合与其子类的数据结构

本文详细介绍了Java中的四种主要集合类型:列表(如ArrayList和LinkedList)、集合(如HashSet和TreeSet)、映射(如HashMap和TreeMap)以及队列(如LinkedList和Arraylist)。讲解了它们各自的数据结构、优缺点,并举例说明了在不同场景下的适用性。

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

在 Java 中,集合主要分为四类,分别是列表、集合、映射和队列。而每一种集合呢,又有自己的数据结构,比如数组、链表、哈希表、树等等。这些数据结构都有自己的优缺点,适用于不同的场景呢

1-列表呢,是一种有序的集合,可以重复元素,主要有 ArrayList 和 LinkedList 两种实现。ArrayList 呢,是基于数组实现的,查询快,增删慢。而 LinkedList 呢,是基于链表实现的,增删快,查询慢。比如,你想在一个列表中添加或删除元素,就可以使用 LinkedList。如果你想快速查找一个元素,就可以使用 ArrayList

2-接下来是Set集合啦,集合是一种无序的集合,不能重复元素,主要有 HashSet 和 TreeSet 两种实现。HashSet 呢,是基于哈希表实现的,不保证元素的顺序,查找快。TreeSet 呢,是基于红黑树实现的,可以保证元素的排序,查找慢。比如,你想在一个集合中快速查找一个元素,就可以使用 HashSet。如果你想在一个集合中保证元素的排序,就可以使用 TreeSet。

3-映射呢,是一种键值对的集合,不能重复键,主要有 HashMap 和 TreeMap 两种实现。HashMap 呢,是基于哈希表实现的,不保证键值对的顺序,查找快。TreeMap 呢,是基于红黑树实现的,可以保证键值对的排序,查找慢。比如,你想在一个映射中快速查找一个键对应的值,就可以使用 HashMap。如果你想在一个映射中保证键值对的排序,就可以使用 TreeMap。

4-最后是队列啦,队列是一种先进先出的集合,主要有 LinkedList 和 Arraylist 两种实现。 LinkedList 呢,是基于链表实现的,入队和出队快。Arraylist 呢,是基于数组实现的,查询快。比如,你想在一个队列中快速入队和出队,就可以使用 LinkedList。如果你想在一个队列中快速查询一个元素,就可以使用 Arraylist

总结,Java 中的集合主要分为四类,分别是列表、集合、映射和队列。每一种集合都有自己的数据结构和实现原理,适用于不同的场景。比如,你想在一个集合中快速查找一个元素,就可以使用基于哈希表实现的 HashSet 或 HashMap。如果你想在一个集合中保证元素的排序,就可以使用基于红黑树实现的 TreeSet 或 TreeMap。如果你想在一个队列中快速入队和出队,就可以使用基于链表实现的 LinkedList。如果你想在一个队列中快速查询一个元素,就可以使用基于数组实现的 ArrayList

 

2-1  List 的子类主要有 ArrayList、LinkedList、Vector 和 Stack。ArrayList 呢,是基于数组实现的,查询快,增删慢。LinkedList 呢,是基于链表实现的,增删快,查询慢。Vector 呢,是线程安全的 ArrayList,效率较低。Stack 呢,是基于数组或链表实现的栈,先进后出,主要有 push 和 pop 两种操作。这些子类都有自己的数据结构和执行效率,适用于不同的场景。比如,你想在一个列表中快速查找一个元素,就可以使用 ArrayList。如果你想在一个列表中快速增删元素,就可以使用 LinkedList。如果你想在一个多线程环境中使用列表,就可以使用 Vector。如果你想在一个列表中实现栈的功能,就可以使用 Stack。

 

2-2  Set 接口在 Java 中有两个常用的实现类,分别是 HashSet 和 TreeSet 。
 HashSet 是基于哈希表实现的,它不保证元素的顺序,并且不允许元素重复。 HashSet 的性能非常高,在添加、删除和查找元素时平均时间复杂度为 O(1) 。
 TreeSet 是基于红黑树实现的,它保证元素的排序,并且不允许元素重复。 TreeSet 中的元素按照自然顺序排序,如果你需要自定义排序规则,可以使用 Comparator 接口。 TreeSet 的性能较 HashSet 略差,在添加、删除和查找元素时平均时间复杂度为 O(log n) ,其中 n 是集合中的元素数量。
除了这两个常见的实现类之外, Set 接口还有一些不常用的实现类,比如 LinkedHashSet 和 EnumSet 。 LinkedHashSet 是基于哈希表和链表实现的,它保证元素的插入顺序,并且不允许元素重复。 EnumSet 是专门为枚举类型设计的实现类,它只允许存储枚举类型的元素,并且不允许元素重复。

2-3 Map 接口是 Java 中的一个接口,用于表示键值对映射的集合。 Map 接口中的方法主要用于操作键值对,包括插入、删除、获取、更新等。 Map 接口的常用方法有 put(K key, V value) ,用于向 Map 中添加键值对; get(Object key) ,用于根据键获取值; remove(Object key) ,用于根据键删除键值对; containsKey(Object key) ,用于检查 Map 中是否包含指定的键; isEmpty() ,用于检查 Map 是否为空; size() ,用于获取 Map 中的键值对数量。 Map 接口的实现类有很多,其中最常用的是 HashMap 和 TreeMap 。 HashMap 是基于哈希表实现的,它不保证键值对的顺序,并且不允许键值对重复。 TreeMap 是基于红黑树实现的,它保证键值对的排序,并且不允许键值对重复。 HashMap 的性能非常高,在插入、删除和查找键值对时平均时间复杂度为 O(1) 。 TreeMap 的性能较 HashMap 略差,在插入、删除和查找键值对时平均时间复杂度为 O(log n) ,其中 n 是 Map 中的键值对数量。
除了这两个常见的实现类之外, Map 接口还有一些不常用的实现类,比如 LinkedHashMap 和 WeakHashMap 。 LinkedHashMap 是基于哈希表和链表实现的,它保证键值对的插入顺序,并且不允许键值对重复。 WeakHashMap 是基于哈希表实现的,它使用弱引用存储键值对,当键不再被引用时,键值对会自动被垃圾回收

 

2-4  Queue 接口表示队列数据结构,它的子接口有 BlockingQueue 、 Deque 和 PriorityQueue 。其中, BlockingQueue 表示阻塞队列,可以在队列为空或满时阻塞当前线程; Deque 表示双端队列,可以在队列的两端进行元素的添加和删除操作; PriorityQueue 表示优先队列,可以按照元素的自然顺序或自定义的比较器对元素进行排序。 Queue 接口的常见实现类有 ArrayBlockingQueue 、 LinkedBlockingQueue 、 LinkedList 、 PriorityQueue 等。其中, ArrayBlockingQueue 是基于数组实现的阻塞队列,它具有固定的大小; LinkedBlockingQueue 是基于链表实现的阻塞队列,它的大小可以动态调整; LinkedList 是基于链表实现的双端队列; PriorityQueue 是基于堆实现的优先队列。这些实现类的数据结构和线程安全性如下:
-  ArrayBlockingQueue :基于数组实现,内部使用锁和条件变量来实现线程安全。

-  LinkedBlockingQueue :基于链表实现,内部使用锁和条件变量来实现线程安全。

-  LinkedList :基于链表实现,不是线程安全的。

-  PriorityQueue :基于堆实现,内部使用锁来实现线程安全。
总的来说, Queue 接口及其子接口和实现类提供了多种不同的数据结构和线程安全性的队列,你可以根据具体的需求选择合适的队列来使用

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值