JDK集合框架学习小结

Java集合框架的核心接口、抽象类及其具体实现类之间通过继承关系进行丰富且层次分明的设计

顶层接口与接口间关系

Iterable接口

位于最顶层的是java.lang.Iterable接口,它是所有集合类(包括CollectionMap等)的根接口,定义了一个通用的方法iterator(),用于返回一个遍历集合元素的迭代器。

Collection接口

java.util.Collection接口直接继承自Iterable接口,是集合框架的核心接口之一,它代表一组对象的集合,提供了对集合元素的基本操作,如添加、删除、查询大小、是否为空、是否包含某个元素等。Collection接口有以下直接子接口:

  • List:有序、可重复元素的集合,允许通过索引来访问元素,并提供插入、移除和定位元素的方法。
  • Set:不允许包含重复元素的集合,没有索引,但可能根据某种排序规则对元素进行排序或保持其自然顺序。
  • Queue:先进先出(FIFO)或后进先出(LIFO)的队列接口,通常用于处理等待执行的任务或其他待处理的数据。
  • Deque(双端队列):同时支持两端插入和移除元素的线性集合,扩展了Queue接口。
Map接口

虽然Map接口并不直接继承自Collection,但它也是集合框架的重要组成部分,表示键值对的集合。每个键唯一,与一个值相关联。Map接口提供了添加、删除、查找键值对以及检查键是否存在等操作。

抽象类与实现类

在接口之下,有一些抽象类作为实现接口的骨架,提供了部分通用逻辑,具体的集合类再继承这些抽象类以减少重复代码。例如:

  • AbstractCollection:实现了Collection接口的部分或全部方法,为具体集合类提供了一种通用实现。
  • AbstractList:继承自AbstractCollection,并实现了List接口,为有序列表的实现提供了基础。
  • AbstractSet:继承自AbstractCollection,并实现了Set接口,简化了无重复元素集合的实现。
  • AbstractQueue:继承自AbstractCollection,并实现了Queue接口,为队列实现提供通用功能。
  • AbstractMap:实现了Map接口的大部分方法,为具体映射类提供基础实现。

具体实现类

Java集合框架提供了多种具体实现类,它们继承或实现上述接口及抽象类,以满足不同场景下的性能、并发需求和特定功能。例如:

对于List接口:

  • ArrayList:基于动态数组实现,支持快速随机访问,但在中间插入和删除元素时效率较低。
  • LinkedList:基于双向链表实现,插入和删除操作效率较高,但随机访问速度较慢。
  • Vector:与ArrayList类似,但线程同步,适用于多线程环境,但并发性能不如并发集合类如CopyOnWriteArrayList

对于Set接口:

  • HashSet:基于哈希表实现,无序,高效查找和插入。
  • TreeSet:基于红黑树实现,有序,自动维护元素排序。
  • LinkedHashSet:结合了HashSetLinkedList的特点,既保证元素唯一,又按元素插入顺序进行迭代。

对于Queue接口:

  • PriorityQueue:优先队列,基于堆结构实现,队列中的元素按自然排序或比较器排序。
  • ArrayDeque:基于循环数组实现的双端队列,常用于替代LinkedList作为高效的队列或栈。

对于Map接口:

  • HashMap:基于哈希表实现,无序,高效查找和插入。
  • TreeMap:基于红黑树实现,有序,自动维护键的排序。
  • LinkedHashMap:结合了HashMapLinkedList的特点,保留插入顺序或最近最少使用(LRU)顺序。
  • ConcurrentHashMap:线程安全的哈希表,适用于高并发环境。

总结

Java集合框架的继承关系如下:

 

Code

1Iterable
2   └── Collection
3         ├── List
4         │    ├── AbstractList
5         │    │    ├── ArrayList
6         │    │    ├── LinkedList
7         │    │    └── ... (其他具体List实现)
8         │    └── ... (其他List实现,可能直接实现List接口)
9         ├── Set
10         │    ├── AbstractSet
11         │    │    ├── HashSet
12         │    │    ├── TreeSet
13         │    │    └── LinkedHashSet
14         │    └── ... (其他Set实现,可能直接实现Set接口)
15         ├── Queue
16         │    ├── AbstractQueue
17         │    │    ├── PriorityQueue
18         │    │    ├── ArrayDeque
19         │    │    └── ... (其他具体Queue实现)
20         │    └── ... (其他Queue实现,可能直接实现Queue接口)
21         └── Deque
22              ├── ArrayDeque
23              └── ... (其他具体Deque实现)

此外,Map接口与Collection接口并列,但不直接继承自Collection

 

Code

1Map
2   ├── AbstractMap
3   │    ├── HashMap
4   │    ├── TreeMap
5   │    ├── LinkedHashMap
6   │    ├── ConcurrentHashMap
7   │    └── ... (其他具体Map实现)
8   └── ... (其他Map实现,可能直接实现Map接口)
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值