- 博客(24)
- 收藏
- 关注
原创 Java中的LinkedBlockingQueue
LinkedBlockingQueue是java并发包(JUC)下的一种有界或者是无界的阻塞队列,基于链表实现,适用于生产者消费者模式。
2025-03-11 18:40:24
258
原创 Java中的ArrayBlockingQueue
ArrayBlockingQueue是一个基于数组实现的有界阻塞队列,设计目的是为了支持多线程环境下的生产者-消费者模式。
2025-03-03 12:20:01
356
原创 Java中的ArrayDeque
ArrayDeque是基于动态数组实现的双端队列,支持在两端快速插入和删除元素。这样设计操作数据更加灵活,提供接近数组的性能。
2025-02-28 19:02:36
364
原创 Java集合对比
2.根据节点删除:O(1) (节点中有前后指针,获取到对应节点修改其指针)双向链表添加:O(1) (可以获取到节点的前后节点)双向链表删除:O(1) (可以获取到节点的前后节点)是红黑树:根据逻辑查找到元素删除O(1)+O(logn)红黑树:按照其逻辑添加O(1)+O(logn)是链表:遍历链表找到元素删除O(1)+O(n)是链表:遍历链表找到元素删除O(1)+O(n)索引位只有一个元素(不用移位):O(1)索引位只有一个元素(不用移位):O(1)是红黑树O(1)+O(logn)
2025-02-28 13:52:11
388
原创 Java中的HashTable
HashTable是基于hash表实现的存储key-value数据的集合,它的所有方法都添加了同步锁,是线程安全的。
2025-02-28 12:19:32
246
原创 Java中的TreeMap
TreeMap继承自AbstractMap,并实现了NavigableMap接口(NavigableMap继承自SortedMap接口)。底层的数据结构是红黑树,按照键的自然排序或者自定义实现的规则排序,实现元素的有序性。
2025-02-27 21:34:51
1533
原创 Java中的LinkedHashMap
LinkedHashMap继承自HashMap,并且实现了Map接口LinkedHashMap在继承了HashMap的底层数据结构的同时,维护了一个双向链表,保证了数据插入或访问顺序,是有序的哈希表。
2025-02-26 14:51:06
277
原创 Java中的TreeSet
TreeSet是基于红黑树实现的有序集合,其底层依赖是TreeMap,通过维护元素的自然顺序或者是自定义实现比较器来确认元素顺序。
2025-02-25 18:28:27
257
原创 Java中的LinkedHashSet
LinkedHashSet继承自HashSet,保留了HashSet的特性,在此基础上保证了元素插入的有序性。
2025-02-25 13:29:43
244
原创 Java中的Collections.synchronizedList()和CopyOnWriteArrayList
我们知道在多线程的环境下并不是线程安全的,那如果我们需要在多线程的场景下使用连续存储并且数据具有有序性,可直接快速访问元素的集合时,可以使用或者替代Collections.synchronizedList()用于将普通的List转化为线程安全的同步列表。其底层是基于,通过包装将原始列表转换为对其所有操作都添加同步锁,来确保多线程的环境下的安全性。
2025-02-24 12:48:23
1336
原创 JVM的运行时数据区
结合不同的垃圾回收算法,新生代和老年代采用不同的垃圾回收算法和策略进行垃圾回收,提高回收效率,减少STW(Stop-The-World)时间。JVM中的程序计数器(Program Counter Register)是一块较小的内存空间,主要用于存储当前线程正在执行的字节码指令的地址。在JVM中,栈帧是调用方法的基本单元,每当一个方法被调用时,就会创建一个栈帧压入当前线程的虚拟机栈中;:将Eden区域和其中一个Survivor区(From区)的存活对象复制到另一个Survivor区(To区),清空原区内存。
2025-02-18 16:58:38
831
原创 Java中的String,StringBuilder,StringBuffer
String,StringBuilder,StringBuffer都是用于处理字符串的类。
2025-02-13 14:09:08
447
原创 Java中的synchronized
c++;c--;return c;如果是多个线程同时对同一个Counter对象进行数据操作,可能会因为多个线程的最终执行顺序不同而导致最终结果不同。代码中对变量c的+1获取当前c的值对c进行+1操作将计算后的结果写入内存c--操作与c++操作是一样的拆分步骤,只是第二步的+1变成了-1线程A获取到c线程B获取到c线程A对c进行-1操作线程B对c进行+1操作线程B将结果写回内存,此时c的值是1线程A将结果写回内存,此时c的值是-1。
2025-02-12 16:40:29
1157
原创 Java之强引用与弱引用
当一个对象被最常用的等号赋值时,这个引用类型就是强引用弱引用通过类实现。子类通过继承该类可实现子类特定的属性和行为。也可以直接使用实现弱引用。//将对象的强引用置为null,此时创建的Object对象只剩下弱引用。
2025-02-11 00:57:57
449
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人