Java基础的数据结构类梳理和总结

图片

* 程序员的工作不仅仅是写代码,更是解决问题。*

    虽然用了Java多年,但一直没有对其基础的数据结构类做过系统的总结。最近有个契机,我对其进行了全面总结,以便后续在使用时能够快速索引和参考。

    Java 中的基础数据结构主要包括集合框架(Collection Framework)和映射(Map)。它们提供了多种接口和实现类,便于开发者高效地管理和操作数据。这些数据结构的继承关系错综复杂,但可以通过几个核心接口和类来理解其主要结构。如下图:

图片

图中可以看出主要分为Collection和Map体系,这里对其分别进行拆解。

Collection体系:

图片

List(列表)

  • List是有序集合,允许重复元素。

  • 常见的实现类有ArrayList和LinkedList。

    • ArrayList基于动态数组实现,支持随机访问。

    • LinkedList基于链表实现,支持高效的插入和删除操作。

Set(集)

  • Set是不允许重复元素的集合,不保证元素的顺序。

  • 常见的实现类有HashSet、TreeSet和LinkedHashSet。

    • HashSet基于哈希表实现,具有快速查找的特性。

    • TreeSet基于红黑树实现,提供了有序的集合。

    • LinkedHashSet继承自HashSet,但保留了元素的插入顺序。

Queue(队列)

  • Queue是一种先进先出(FIFO)的数据结构,常用于任务调度等场景。

  • 常见的实现类有LinkedList,PriorityQueue,PriorityBlockingQueue。

    • LinkedList 实现一个先进先出的队列。

    • PriorityQueue 实现了一个优先队列:从队首获取元素时,总是获取优先级最高的元素。非阻塞、非线程安全、无边界。

    • PriorityBlockingQueue:支持优先级排序的无边界阻塞队列实现类,阻塞、线程安全、无边界。

Deque(双端队列):

  • Deque是一种同时支持在两端进行插入和删除操作的队列,可以作为栈使用。

  • 常见的实现类有ArrayDeque,LinkedList,ConcurrentLinkedDeque。

    • ArrayDeque是基于动态数组实现的双端队列,适用于栈(LIFO)和队列(FIFO)两种场景。

    • LinkedList实现了Deque接口,基于双向链表,可用作队列、双端队列、栈,支持所有List接口。

    • ConcurrentLinkedDeque是一个基于链表的无界线程安全双端队列,并发操作高效,适用于多线程环境。基于CAS(Compare-And-Swap)算法实现。

Map 体系

图片

Map接口表示键值对的集合,不允许重复的键,但允许重复的值。

  • 其主要实现类包含: HashMap,LinkedHashMap,HashTable,TreeMap。

  • HashMap基于哈希表的实现,允许null键和null值。提供常数时间复杂度的基本操作(如插入、删除和访问),但不保证顺序。非线程安全,适用于单线程环境。

  • LinkedHashMap继承自HashMap,并且通过双向链表维护插入顺序。除了具有HashMap的所有特性,还维护了键值对的插入顺序或访问顺序。非线程安全,适用于单线程环境。

  • HashTable基于哈希表的实现,类似于HashMap,但不允许null键和null值。所有方法都是同步的,因此是线程安全的,但性能相对较低。线程安全,适用于多线程环境。

  • TreeMap基于红黑树实现的有序映射,键值对按键的自然顺序或通过提供的Comparator进行排序。提供O(log n)时间复杂度的基本操作,键值对是有序的,非线程安全,适用于单线程环境。

QA环节:

1、除了以上的类,还有其他的类吗?

答:有很多其他的类,如果一些复杂的功能以上类无法满足,除了自己实现之外,可参考官网文档寻找其他类:Java Platform, Standard Edition 8 API Specification---https://docs.oracle.com/javase/8/docs/api/

2、选择基础类时,是否需要关注线程安全?

答:对于无需考虑多线程的情况下,优先选择非线程安全,因为其性能较好。

参考:

Queue 接口及其实现类介绍:https://java.jverson.com/data-types/queue-interface.html

HEAP 堆和优先队列 PriorityQueue:https://java.jverson.com/data-types/PriorityQueue.html

Java Platform, Standard Edition 8 API Specification:https://docs.oracle.com/javase/8/docs/api/

  • 20
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值