
Java集合
文章平均质量分 94
对Java集合框架的了解和使用
Miaow.Y.Hu
欲买桂花同载酒,终不似,少年游。
展开
-
ConcurrentHashMap的相关介绍和使用
ConcurrentHashMap是Java中提供的一个关于线程安全的哈希表实现,他是java.util.concurrent包的一部分,允许多个读操作并发进行,提高了并发环境下的性能。ConcurrentHashMap实现了ConcurrentMap接口,故而他也有ConcurrentMap中的所有原子操作,例如putIfAbsent、remove和replace。原创 2024-03-18 14:28:55 · 1015 阅读 · 0 评论 -
ConcurrentMap的相关特点和使用
我们创建了一个`FlashSaleService`类,它有一个`ConcurrentMap`来存储商品的库存。我们使用`AtomicInteger`来表示库存数量,因为`AtomicInteger`提供了原子操作来保证在多线程环境下的线程安全。`tryPurchase`方法是核心方法,它尝试为用户购买商品。它首先检查库存是否充足,然后使用`compareAndSet`方法来原子地更新库存数量。如果在尝试更新库存时库存已经被其他线程修改,`compareAndSet`会返回`false`,此时我们会重试直原创 2024-03-18 10:40:22 · 1879 阅读 · 0 评论 -
SortedMap、NavigableMap、TreeMap介绍和使用
SortedMap接口:SortedMap是一个接口,继承自Map接口,它定义了对键值对按照键的自然顺序或自定义顺序进行排序的功能。SortedMap中的键值对是按照键的顺序排列的,因此可以根据键的顺序进行范围查找和遍历操作。SortedMap接口提供了一系列的导航方法和有序操作方法。NavigableMap接口:NavigableMap是SortedMap接口的子接口,它在SortedMap的基础上增加了一些额外的导航方法,使得对有序键值对的操作更加方便和灵活。原创 2024-03-14 15:29:48 · 2756 阅读 · 0 评论 -
LinkedHashMap介绍和使用
LinkedHashMap是Java中的一种特殊类型的HashMap,它继承自HashMap并实现了Map接口。与普通的HashMap不同,LinkedHashMap在内部使用**双向链表**维护了插入顺序或者访问顺序,故而保证元素的顺序。LinkedHashMap的主要用途是在需要保持元素顺序的场景中使用,它可以用来实现LRU(least Recently Used ,最近很少使用) 缓存,通俗的讲就是根据元素的访问顺序进行缓存淘汰,当然,linkedHashMap还可以用于实现有序的映射表,保持元素原创 2024-03-14 10:51:49 · 3140 阅读 · 0 评论 -
Map之AbstractMap、HashMap
基于哈希表的Map接口实现。这个实现提供了所有可选的映射操作,**并允许空值和空键**。(HashMap类大致相当于Hashtable,不同之处在于它是不同步的,并且允许为空。)这个类不保证映射的顺序;特别是,它不能保证顺序在一段时间内保持不变。该实现为基本操作(get和put)提供恒定时间的性能,前提是哈希函数将元素正确地分散到桶中。对集合视图进行迭代所需的时间与HashMap实例的“容量”(桶的数量)加上它的大小(键值映射的数量)成正比。因此,如果迭代性能很重要,那么不要将初始容量设置得太高(或负载原创 2024-03-07 17:44:44 · 1187 阅读 · 0 评论 -
Java的 Map以及实现一个简单的红黑树
Map是将键映射到值的对象。map**不能包含重复的键**; 每个键最多只能映射到一个值。这个接口取代了Dictionary类,Dictionary类是一个完全抽象的类,而不是接口。Map接口提供了三个集合视图,它们允许将映射的内容视为一组键、一组值或一组键-值映射。映射的顺序定义为映射集合视图上的迭代器返回其元素的顺序。一些类似实现,比如TreeMap类,对它们的顺序做出了特定的保证;其他类,如HashMap类,则不需要。注意:如果使用可变对象作为映射键,必须非常小心。如果对象的值以影响相等比较的原创 2024-03-07 11:12:40 · 2291 阅读 · 0 评论 -
List之CopyOnWriteArrayList
CopyOnWriteArrayList通过"写时复制"(Copy-On-Write)机制来保证线程安全性。具体来说,当有线程对CopyOnWriteArrayList进行修改操作时,**它会创建一个新的副本,并在副本上进行修改操作**。这样,其他线程仍然可以在原始列表上进行读取操作,不会受到修改操作的影响。**一旦修改完成,新的副本会替换原始列表,以确保修改的一致性。**原创 2024-01-15 20:29:57 · 1308 阅读 · 0 评论 -
List 之 Stack 以及List的相关总结
由于Stack继承自Vector,故而Stack中并没有许多新的方法,一般主要操作栈就是在Stack中进栈和出栈,当然还可以判断栈是否为空,以及在栈中搜索相关元素。这个栈里边很多方法来自Vector,直接使用就行,值得注意的是,在Stack中,**Java通过五个操作对Vector进行相关拓展,他允许将向量视为堆栈。Stack是Vector的增强类,堆栈顶部对应向量末尾。**原创 2024-01-16 19:44:26 · 1617 阅读 · 0 评论 -
Set之ConcurrentSkipListSet、EnumSet
ConcurrentSkipListSet是java中的集合类,是在多线程的环境中使用的,实现Set接口,它基于跳表(skip List)的数据结构。跳表是一种基于并行排序的数据结构,允许快速的出入,删除和查找操作,且在多线程环境中具备良好的并发性能。主要用途和特点:- 线程安全: ConcurrentSkipListSet 是线程安全的,可以在多线程环境中安全的使用呢,无需额外的同步措施。但需要注意的是,他是复合操作,并不保证原子性,故而在特定的应用场景下,可能需要外部同步,从而保证一系列操作的原子原创 2024-01-29 20:20:10 · 1254 阅读 · 0 评论 -
Queue之DelayQueue、PriorityQueue、PriorityBlockingQueue讲解
在Java的队列世界里,有三位大佬,他们分别是DelayQueue、PriorityQueue和PriorityBlockingQueue。今天,让我们一起揭开他们神秘的面纱,看看他们各自的特点和用途吧!原创 2024-02-23 16:16:52 · 1004 阅读 · 0 评论 -
Queue之ArrayBlockingQueue、LinedBlockingQueue
LinkedBlockingQueue和ArrayBlockingQueue都是Java中的阻塞队列实现,下面是他们两个直接的比较: - **底层数据结构**:LinkedBlockingQueue使用链表作为底层数据结构,而ArrayBlockingQueue使用数组作为底层数据结构。这导致LinkedBlockingQueue在插入和删除元素时具有较高的性能,而ArrayBlockingQueue在随机访问元素时具有较高的性能。原创 2024-02-02 16:27:08 · 1166 阅读 · 0 评论 -
Vector特点
如果你是在开发岗位的开发者,你应该会发现,我们的Vector在C++中使用频繁,但是在Java中我们用起来就很少了,这是为什么呢?原因在于,我们的Vector在实现线程的时候,会带来额外的性能开销,在单线程的环境下,我们作为Java开发者更加喜欢ArrayList,在单线程的情况下,ArrayList查询会比Vector更加高效。此外,Java提供了更加先进的并发集合类,例如`ConcurrentLinkedQueue`以及上篇我们介绍的`CopyOnWriteArrayList`,他们在多线程的环境下原创 2024-01-16 14:47:26 · 1147 阅读 · 0 评论 -
Queue之Queue、BlockingQueue、AbstractQueue的相关知识介绍
学过数据结构的都应该知道,队列是什么,并且应该都知道队列最重要的特点是什么,实际上在Java中也是一样的,遵循这样的特点的,Java中的队列可以通过Java,util.Queue接口来实现,常见的队列实现包括java.util.linkedList和java.util.ArrayDeque。原创 2024-02-01 17:46:10 · 951 阅读 · 0 评论 -
Set之TreeSet与HashSet
HashSet是基于哈希表实现的,他可以快速的进行插入、删除和查找操作,时间复杂度为O(1) ,HashSet不会保证元素的顺序,原因在于,他是根据元素的哈希值来存储和查询元素的,如果需要按照元素的顺序进行遍历集合,可以使用LinkedHashSet,他是HashSet的子类,内部使用的是链表维护元素的顺序。原创 2024-01-22 20:21:48 · 1297 阅读 · 0 评论 -
java集合框架概述以及Iterable接口和Collection简单介绍
最近在开发过程中,发现自己对java集合的了解已经忘得差不多了,作为开发者,这可不是一件好事哈,之前开始学习java基础的时候,学过一段时间的java集合,但是现在到了工作岗位上的时候,发现自己用到的集合仅有少部分,主要使用到List和Map,.其他的用到少,可能是我项目组用的少吧,或者说我们目前居多均用List和Map就可以解决了。原创 2024-01-09 20:00:20 · 1154 阅读 · 0 评论 -
List之AbstractSequentialList、LinkedList
我们上篇讲解了ArrayList,知道了ArrayList的查询很快,但是插入和删除就比较慢了,这个LinkedList则是插入和删除快,但是查询慢。主要原因在于,其数据结构,LinkedList的数据结构是由`一个头节点和一个尾节点`组成,每个节点都包含`一个元素和两个指针`,分别指向前一个节点和后一个节点,通过这些指针,LinkedList可以在常数时间内进行元素的插入和删除操作。由于LinkedList是一个双向链表,所以它可以从**头到尾或者从尾到头**遍历元素。此外,LinkedList还原创 2024-01-15 19:56:37 · 1103 阅读 · 0 评论 -
Java的Deque之Deque、BlockingDeque、LinkedBlockingDeque、ArrayDeque
Java 中的 Deque(双端队列)是一种具有队列和栈特性的数据结构,它允许在两端进行插入和删除操作。Deque 接口是 Java 集合框架中的一部分,它定义了双端队列的基本操作。 BlockingDeque 接口: BlockingDeque 接口是 Deque 接口的子接口,它表示一个支持阻塞操作的双端队列。它定义了一些阻塞方法,如 putFirst(), putLast(), takeFirst(), takeLast() 等,这些方法在队列满或空时会阻塞线程。原创 2024-02-29 17:08:31 · 3660 阅读 · 2 评论 -
Set之linkedHashSet , CopyOnWriteArraySet
LinkedHashSet是Java集合框架中的一种实现类,它继承自HashSet并且保持插入顺序。它使用哈希表来存储元素,并使用链表来维护插入顺序。由于使用哈希表,LinkedHashSet提供了常数时间的复杂度(O(1))来执行插入、删除和查找操作。同时,由于使用链表来维护插入顺序,LinkedHashSet可以按照元素的插入顺序进行迭代。因此,LinkedHashSet适用于需要保持插入顺序并且需要高效的插入、删除和查找操作的场景。原创 2024-01-23 20:09:34 · 1061 阅读 · 0 评论 -
Set集合之Set,AbstractSet
自本篇开始,将围绕java的Set进行介绍,也是对我java知识的巩固吧,处理业务越多,发现自己对基础知识的薄弱,于是又回头继续学习,没办法,学习就是这样,忘记又学,学了又忘,听他们说,把东西理解了,并掺杂自己的想法就不会忘记了,我也不知道是不是真的,算了废话不多说了,开始介绍Set集合了;原创 2024-01-19 17:42:17 · 1329 阅读 · 0 评论 -
java集合之 List,AbstractList,ArrayList介绍
ArrayLis**t作为Java中最常用的动态数组实现**,他实现了**List接口**,由上图可以见到,其继承的AbstractList类实现的List接口,他**可以动态地增加或者删除元素**。注意一下他底层是数组,并且是可以扩充的数组。既然他是数组实现的,我们都知道如果是数组元素,那么**随机访问速度会很快,但有优点就有缺点,查询速度快了,那么删除或者插入就慢,我们在ArrayList中插入或者删除元素的时候需要移动后面的元素,从而导致他的速度慢。**原创 2024-01-10 17:31:48 · 1245 阅读 · 0 评论