java 集合
崔雨田
这个作者很懒,什么都没留下…
展开
-
阻塞队列之 LinkedBlockingQueue分析探究
LinkedBlockingQueue内部使用Node 节点组成一个单链表head 、 last 并且保存了头尾节点、takeLock = new ReentrantLock();删除的时候锁putLock = new ReentrantLock();存放的时候锁notEmpty = takeLock.newCondition();不为空时候的newConditionnotFull = putLock.newCondition();不满时候的newConditio.原创 2020-12-22 14:11:24 · 194 阅读 · 2 评论 -
阻塞队列之 ArrayBlockingQueue 分析探究
阻塞队列ArrayBlockingQueue内部使用数组来实现具有存放位置具有弹出位置数量内部含有 ReentrantLock一个不为空的Condition \ 一个不满的 Conditionpublic class ArrayBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, java.io.Serializable { /**原创 2020-12-21 19:23:58 · 162 阅读 · 2 评论 -
JUC
JUC1、什么是JUCjuc 是java的一个工具包, 位于 Java.util.concurrent。是java处理高并发编程的一个工具包普通业务代码实现多线程的方式1、直接继承 Thread类2、实现Runable接口:此方式下的多线程没有返回值3、实现Callable接口:Callable接口的多线程能够拥有返回值2、线程和进程进程进程是CPU分配资源的最小单位, 比如一个QQ进程、一个Mysql进程, 进程是线程的集合。java中默认包含两个进程:main、GC线程原创 2020-11-21 22:10:25 · 240 阅读 · 1 评论 -
Java集合源码探究之ConcurrentHashMap 线程安全、转化红黑树、put过程
ConcurrentHashMap类图内部存储结构图解决 hash冲突拉链法 构造函数这个可以指定初始化大小的构造函数,首先会判断提供的初始化值是否 大于 , 如果大于的话, 就直接初始化为最大值, 否则 就使用 tableSizeFor方法把提供的初始化值修改为 2 的次幂。MAXIMUM_CAPACITY static final int MAXIMUM_CAPACITY = 1 << 30 public ConcurrentHashMap() {原创 2020-11-21 22:07:41 · 218 阅读 · 0 评论 -
java 集合源码探究之 treemap 如何保证有序,put过程, get过程。
TreeMapPUT 过程 public V put(K key, V value) { // 目前的根节点 Entry<K,V> t = root; // 第一次添加节点 if (t == null) { // 检查类型和null值 compare(key, key); // type (and possibly null) check // 新建原创 2020-11-05 17:40:43 · 241 阅读 · 0 评论 -
java 集合源码探究之 linkedhashmap,有序的map,如何保证有序
类信息属于hashmap的子类内部的存储单元多了 before 、after带有指向头部和尾部的指针public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>{ static class Entry<K,V> extends HashMap.Node<K,V> { Entry<K,V> befor.原创 2020-10-12 14:05:08 · 425 阅读 · 0 评论 -
java 集合源码探究之 hashtable 扩容、线程安全、遍历方式
类图类信息不可以顺序访问底层使用数组来实现Entry<?,?> 是一个链表也具有负载因子和阈值修改次数以及一些不序列化的属性public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializable { private transient Entry<?原创 2020-10-06 11:43:49 · 279 阅读 · 0 评论 -
java 集合源码探究之 HashSet ,基于 HashMap实现
类信息hashset 的底层是由hashmap实现public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable{ static final long serialVersionUID = -5024744406713321676L; private transient HashMap<E,.原创 2020-10-03 23:21:22 · 395 阅读 · 0 评论 -
Java集合源码探究之遍历方式,Set List Map
迭代器接口类图迭代器是一个接口, 首先看一下java对迭代器接口的描述信息,以及这个接口定义的基本规范迭代器接口的描述, 基本规范实现这个接口, 允许一个对象成为深度 for - each 的目标。并且能够使用泛型。iterator返回一个迭代器forEach(Consumer<? super T> action)对每一个元素演示提供的动作, 直到所有的元素全部通过或者有一个元素抛出异常, 除非实现类有其他的规定,迭代器将按照顺序执行,操作引发的异常被中继到调用方原创 2020-10-03 22:48:35 · 114 阅读 · 0 评论 -
Java 集合源码探究之Vector 底层实现、扩容、线程安全
Vector类图得到的信息实现 Cloneable 接口, 可以拷贝实现RandomAccess接口, 可以随机访问实现Serialzable 接口, 可以序列化实现List 以及继承AbstractList类类信息public class Vector<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializabl原创 2020-09-29 14:53:00 · 310 阅读 · 0 评论 -
java 集合源码探究之 LinkedList 底层实现,常用方法分析。
类图public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable{ }实现Serializable实现Cloneable实现Deque实现Queue继承AbstractList继承AbstractSequentialListL原创 2020-09-25 17:18:31 · 141 阅读 · 0 评论 -
java 集合源码探究之ArrayList 扩容机制、底层实现原理
List接口的继承关系图ArrayList构造函数new ArrayList<>()构造函数, 构造出来一个空的集合,并且使用给定的大小初始化。可以得到以下信息可以指定大小创建ArrayList其底层是由数组实现具有默认的初始化大小 /** * Constructs an empty list with the specified initial capacity. * * @param initialCapacity the原创 2020-09-16 00:25:28 · 212 阅读 · 0 评论 -
java 集合线程不安全
java的集合框架[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xbpXHOZM-1598931161311)(https://cytbucket.oss-cn-beijing.aliyuncs.com/img/java collections framework (1)].png)java 集合在java Collection 接口上面 我们可以看到和它相关的一系列子接口以及实现类(map 在这里的原因, 可能因为它也是一个容器趴) Collection 接口只原创 2020-09-01 11:33:01 · 175 阅读 · 0 评论 -
hashmap 扩容机制
扩容机制初始化分析resize() 的初始化作用分析 /** * Initializes or doubles table size. If null, allocates in * accord with initial capacity target held in field threshold. * Otherwise, because we are using power-of-two expansion, the * elements f原创 2020-08-30 17:36:23 · 79 阅读 · 0 评论 -
hashmap 什么时候转化为红黑树
什么时候转化为红黑树在链表长度大于 8 并且 表的长度大于 64 的时候会转化红黑树!!!! if ((e = p.next) == null) { p.next = newNode(hash, key, value, null); // 并且如果 链表的长度 大于 8 会尝试调用 treeifyBin 方法 if (bi原创 2020-08-30 17:34:51 · 13187 阅读 · 1 评论 -
hashmap如何得到数组下标
1、如何得到数组的下标> hash此方法用计算元素的hash值的。简单分析:如果 key是一个空, 此时他的 hash 为 0如果不是空值拿到它的 hashCode 赋给 H并且 与自身的高16位相与计算static final int hash(Object key) { int h; return key == null ? 0 : (h = key.hashCode()) ^ h >>> 16;}计算索引下标原创 2020-08-30 17:32:45 · 4284 阅读 · 2 评论 -
Java8 HashMap源码分析面试必备
Java8 HashMap关于jdk 8 中hashmap的知识总结讲围绕着下面的几个问题来开展, 带着问题来一步一步探索未知。1、key的hashcode取模来得到数组的下标2、hashmap的初始化大小3、什么时候转化为红黑树4、什么时候会扩容5、hashmap在构造器中是没有初始化的6、如何 put元素7、如何 get元素8、负载因子 为何 是 0.759、容量为何 都是2 的次幂10、hashmap的存储结构存储结构在jdk 1.原创 2020-08-30 16:37:06 · 652 阅读 · 0 评论