java的Collection与Map所有相关类的介绍

前言

本文主要介绍java的Collection与Map相关的所有接口和类的关系,并对这些接口做一些总体的介绍。通过本文我们可以对java的Collection与Map相关的接口和类有一个宏观的把控,也能总体窥探出每个类的一些特征,从而在今后的实践应用过程中,我们可以有的放矢,针对应用的场景选择某个特定的Collection与Map相关的类。至于每个类的具体实现方法,我们这里并没有触及,有兴趣的朋友可以自行去研究。

1. Collection相关类

1.1 Collection相关类图

Collection相关的类图

1.2 Collection相关接口

  • Collection

Collection(容器)里面可以存放各种各样的对象,对这些对象唯一的约束的是这些对象是同一的类型。

  • Set

Set(集合)继承了Collection并扩展了一些新的方法。Set就是数学中集合的概念,集合中不存在重复的元素。

  • SortedSet

SortedSet继承了Set并扩展了一些新方法。存放在集合中的元素将会被排序。

  • NavigableSet

NavigableSet继承了SortedSett并扩展了一些新方法。对集合中的元素可以根据数据之间的大小关系,更加方便的检索数据。

  • List

List继承了Collection并扩展了一些新的方法,List是有序的Collection,使用List能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。和下面要Set不同,List允许有相同的元素。

  • Queue

Queue(队列)继承了Collection并扩展了一些新的方法,Queue是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

  • Deque

Deque(双端队列)继承了Queue并扩展了一些新的方法,Deque是一种具有队列和栈的性质的数据结构。Deque中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。

  • BlockingQueue

BlockingQueue继承了Queue并扩展了一些新方法。当从队列中取出元素数,如果队列中没有元素,取元素的操作将会被阻塞,直到队列中有元素。当存放元素到队列中时,如果队列已满,存放的操作也将被阻塞,直到队列有空间存放元素。

  • BlockingDeque

BlockingDeque继承了Deque并扩展了一些新方法。同样当从队列中取出元素数,如果队列中没有元素,取元素的操作将会被阻塞,直到队列中有元素。当存放元素到队列中时,如果队列已满,存放的操作也将被阻塞,直到队列有空间存放元素。

  • TransferQueue

TransferQueue继承了BlockingQueue并扩展了一些新方法。生产者会一直阻塞直到所添加到队列的元素被某一个消费者所消费(不仅仅是添加到队列里就完事)。

以上都是Collection相关的抽象的接口和类,针对这些接口和类,就需要各自具体的实现,而实现的方式各不相同,这样就会演变成一些不同的具体实现类。

1.3 Set实现类

  • HashSet

HashSet 是哈希表实现的,HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束。

  • LinkHashSet

LinkedHashSet继承了HashSet,同样是根据元素的hashCode值来决定元素的存储位置,但是它同时使用链表维护元素的次序。这样使得元素看起 来像是以插入顺 序保存的,也就是说,当遍历该集合时候,LinkedHashSet将会以元素的添加顺序访问集合的元素。

  • TreeSet

TreeSet继承了NavigableSet,是二差树实现的,Treeset中的数据是自动排好序的,不允许放入null值。

  • EnumSet

EnumMap是Set的一种实现,用于枚举类型元素专用Set实现。

  • CopyOnWriteArraySet

CopyOnWrite容器即写时复制的容器。通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。这样做的好处是我们可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素。所以CopyOnWrite容器也是一种读写分离的思想,读和写不同的容器。

  • ConcurrentSkipListSet

ConcurrentSkipListSet和TreeSet一样也继承了NavigableSet,但ConcurrentSkipListSet是线程安全的有序的集合,适用于高并发的场景。

1.4 List实现类

  • ArrayList

ArrayList是List的实现,ArrayList的实现是基于动态数组的数据结构。

  • LinkedList

ArrayList是List的实现,LinkedList的实现是基于链表结构。

  • CopyOnWriteArrayList

CopyOnWriteArrayList是List的实现,是基于CopyOnWrite理念来实现的,详细可以参考CopyOnWrite 详解

1.5 BlockingQueue实现

  • ArrayBlockingQueue

ArrayBlockingQueue是BlockingQueue的一种实现,是一个基于数组的BlockingQueue实现。

  • LinkedBlockingQueue

LinkedBlockingQueue是BlockingQueue的一种实现,是一个基于链表的BlockingQueue实现。

  • PriorityBlockingQueue

PriorityBlockingQueue是BlockingQueue的一种实现,但是PriorityBlockingQueue是带优先级的无界阻塞队列,每次出队都返回优先级最好或者最低的元素,内部是平衡二叉树堆的实现。

  • SynchronousQueue

SynchronousQueue是BlockingQueue的一种实现,SynchronousQueue和其他的BlockingQueue不同的是SynchronousQueue的capacity是0,即SynchronousQueue不存储任何元素,也就是说SynchronousQueue的每一次insert操作,必须等待其他线性的remove操作。而每一个remove操作也必须等待其他线程的insert操作。

  • DelayQueue

DelayQueue是BlockingQueue的一种实现,用于放置实现了Delayed接口的对象,其中的对象只能在其到期时才能从队列中取走。

1.6 TransferQueue的实现

  • LinkedTransferQueue

LinkedTransferQueue是TransferQueue的一种实现,是一个基于链表的TransferQueue实现。

1.7 Queue的实现

  • ConcurrentLinkedQueue

ConcurrentLinkedQueue是Queue的一种实现,是一个基于链表的Queue实现,并且支持高并发。

1.8 Deque实现

  • LinkedBlockingDeque

LinkedBlockingDeque是BlockingDeque的一种实现,是一个基于链表的BlockingDeque实现。

2 Map相关类

2.1 Map相关类图

在这里插入图片描述

2.2 Map相关接口

  • Map

Map 接口中键和值一一映射,可以通过键来获取值。

  • SortedMap

SortedMap继承Map,主要提供有序的Map实现

  • NavigableMap

NavigableMap继承SortedMap,在有序的基础上还支持快速搜索符合条件的最近的元素,逆序访问等功能。

  • ConcurrentMap

ConcurrentMap继承Map,使得Map支持高并发。

  • ConcurrentNavigableMap

ConcurrentNavigableMap继承了ConcurrentMap和NavigableMap,是ConcurrentMap和NavigableMap两者的结合,也就是一个高并发的NavigableMap。

以上都是Map相关的抽象的接口或类,针对这些接口和类,就要需要具体的实现。而实现的方式各不相同,这样就会演变成一些不同的具体实现类。

2.3 Map相关接口的实现

  • HashMap

HashMap是Map的一种实现,是基于哈希表实现的。

  • TreeMap

HashMap是NavigableMap的实现,是基于树结构实现的。

  • EnumMap

EnumMap是Map的实现,用于枚举类型键的专用Map实现

  • LinkedHashMap

HashMap继承了HashMap,是一个基于链表实现的HashMap。

  • WeakHashMap

WeakHashMap是Map的一种实现,不过WeakHashMap的键是“弱键”。在 WeakHashMap 中,当某个键不再正常使用时,会被从WeakHashMap中被自动移除。更精确地说,对于一个给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,这就使该键成为可终止的,被终止,然后被回收。某个键被终止时,它对应的键值对也就从映射中有效地移除了。

  • IdentityHashMap

IdentityHashMap是Map的一种实现,IdentityHashMap和HashMap一样也是利用哈希表实现Map接口,不同的是,其比较键(或值)时,使用引用相等性代替对象相等性。换句话说,在IdentityHashMap中,当且仅当k1 == k2时,才认为两个键相等,而在正常的Map实现中(比如HashMap),当且仅当两个键k1和K2满足:k1 == null ? k2 == null:k1.equals(k2)时,两个键才相等。

  • HashTable

HashTable是Map的一种实现,它是与HashMap类似,也是基于哈希算法实现的,不允许key-value为NULL值,但又一点值得注意的是HashTable是线程安全的。

  • ConcurrentSkipListMap

ConcurrentSkipListMap是ConcurrentNavigableMap的实现。

  • ConcurrentHashMap

ConcurrentHashMap是ConcurrentMap的实现,是基于哈希算法实现的,可以看作是支持高并发的HashMap。

3 参考文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值