jdk具体实现
文章平均质量分 64
你回到了你的家
这个作者很懒,什么都没留下…
展开
-
LinkedHashMap jdk1.8源码解析
一、介绍及常见用法1.1 继承关系这个类继承了HashMap类,同时实现了Map接口二、属性2.1 Entry //LinkedHashMap实现的HashMap.Node的子类,可以看到添加了链表有关的属性 static class Entry<K,V> extends HashMap.Node<K,V> { Entry<K,V> before, after; Entry(int hash, K key, V va原创 2020-11-06 12:23:30 · 135 阅读 · 1 评论 -
ReentranLock源码分析
一、简介1.1 数据结构ReetrantLock的底层是借助AbstractQueuedSynchronized实现,所以其数据结构依附于AbstractQueuedSynchronized的数据结构。1.2 继承关系public class ReentrantLock implements Lock, java.io.SerializableReetranLock实现了Lock接口,Lock接口中定义了lock与unlock相关操作,并且还存在newCondition方法,表示生成一个条件。原创 2020-09-11 18:39:28 · 477 阅读 · 0 评论 -
ConcurrentHashMap源码解析
二、属性2.1 重要成员变量 //默认为null,初始化发生在第一次插入操作,默认大小为16,用来存储Node结点,大小总是2的倍数 transient volatile Node<K,V>[] table; //只有在扩容时才会被使用的数组 private transient volatile Node<K,V>[] nextTable; //默认为0,用来控制table的初始化和扩容操作 //当值为-1时,表示table原创 2020-09-11 10:25:38 · 123 阅读 · 0 评论 -
HashTable 源码解析 jdk1.8
一、结构图Hashtable采用桶位+链表结构实现,如下图所示:二、属性2.1 table底层是一个存储Entry的数组private transient Entry<?,?>[] table;2.2 Entry一个单向链表结构 private static class Entry<K,V> implements Map.Entry<K,V> { final int hash; final K key;原创 2020-09-10 16:54:28 · 254 阅读 · 0 评论 -
AbstractQueuedSynchronizer源码分析
一、属性/** * Wait queue node class. * * <p>The wait queue is a variant of a "CLH" (Craig, Landin, and * Hagersten) lock queue. CLH locks are normally used for * spinlocks. We instead use them for blocking synchronizers, but原创 2020-09-09 07:17:02 · 338 阅读 · 0 评论 -
jdk unsafe类源码解析
一、CAS相关public final native boolean compareAndSwapObject(Object var1, long var2, Object var4, Object var5);public final native boolean compareAndSwapInt(Object var1, long var2, int var4, int var5);public final native boolean compareAndSwapLong(Object v原创 2020-09-08 15:13:49 · 271 阅读 · 0 评论 -
Java AtomicInteger类源码解析
一、属性1.1 unsafe&valueoffset// setup to use Unsafe.compareAndSwapInt for updates private static final Unsafe unsafe = Unsafe.getUnsafe(); private static final long valueOffset;第一个变量是Unsafe,Unsafe是JDK内部的工具类,主要实现了平台相关的操作。下面内容引自JDK官方文档:sun.mis原创 2020-09-08 14:30:30 · 194 阅读 · 0 评论 -
jdk LinkedHashMap源码分析
一、前言HashMap存在着一个问题,那就是它的迭代顺序不是它的存储顺序,即HashMap中的元素是无序的。但是有些场景下,我们需要使用一个有序的map。这种情况下,我们就可以使用LinkedHashMap,它虽然增加了时间可空间上的开销,但是通过维护一个运行于所有条目的双向链表,LinkedHashMap保证了元素的迭代顺序。二、属性2.1 Entry可以看出在LinkedHashMap中增加了before和after用于维护双向链表。/** * HashMap.Node subcla原创 2020-09-07 08:53:48 · 135 阅读 · 1 评论 -
Java ConcurrentHashMap
一、为什么要使用ConcurrentHashMapHashMap线程不安全,而Hashtable线程安全但效率低下,因为Hashtable容器使用synchronized来保证线程安全,但在线程竞争激烈的情况下Hashtable的效率非常低下。因为当一个线程访问Hashtable的同步方法时,其他线程访问Hashtable的同步方法时,可能会进入阻塞或轮询状态。如线程1使用put进行添加元素,线程2不但不能使用put方法添加元素,并且也不能使用get方法来获取元素,所以竞争越激烈效率越低。二、Concu原创 2020-09-04 08:04:43 · 249 阅读 · 1 评论 -
jdk TreeMap源码解析
一、属性1.1 Entrystatic final class Entry<K,V> implements Map.Entry<K,V> { K key; V value; Entry<K,V> left; Entry<K,V> right; Entry<K,V> parent; boolean color = BLACK; /**原创 2020-08-30 22:52:24 · 143 阅读 · 0 评论 -
Java comparator接口源码解读
一、使用方法重写接口中的compare方法Comparator<int[]> c=new java.util.Comparator<int[]>() { @Override public int compare(int[] a, int[] b) { return a[1]-b[1]; }};二、方法原创 2020-08-29 13:50:59 · 340 阅读 · 0 评论 -
jdk11 HashSet源码阅读
一、属性1.1 mapHashSet的底层存储方式是HashMapprivate transient HashMap<E,Object> map;1.2 PRESENT因为HashMap中需要键值对来进行存储而HashSet只存储单个变量,因此创建一个没有意义的变量来配合HashSet的变量来进行存储// Dummy value to associate with an Object in the backing Map private static final Objec原创 2020-08-28 22:52:28 · 130 阅读 · 0 评论 -
jdk Arrays类
二、方法2.1 copyof/** * Copies the specified array, truncating or padding with null characters (if necessary) * so the copy has the specified length. For all indices that are valid * in both the original array and the copy, the two arrays wil原创 2020-08-20 15:53:03 · 294 阅读 · 1 评论 -
jdk Double类具体实现
二、方法/** * Returns a string representation of the {@code double} * argument. All characters mentioned below are ASCII characters. * <ul> * <li>If the argument is NaN, the result is the string * "{@code NaN}". *原创 2020-08-20 15:35:18 · 202 阅读 · 0 评论 -
jdk set接口
Set继承了Collection接口方法size/** * Returns the number of elements in this set (its cardinality). If this * set contains more than <tt>Integer.MAX_VALUE</tt> elements, returns * <tt>Integer.MAX_VALUE</tt>. * *原创 2020-08-20 15:24:26 · 121 阅读 · 0 评论 -
jdk Integer 具体实现
一、属性二、方法2.1 parseInt/** * Parses the string argument as a signed decimal integer. The * characters in the string must all be decimal digits, except * that the first character may be an ASCII minus sign {@code '-'} * ({@code '\u005Cu0原创 2020-08-19 20:32:09 · 204 阅读 · 0 评论 -
jdk AbstractStringBuilder实现
一、属性1.1 value/** * The value is used for character storage. */ char[] value;1.2 count/** * The count is the number of characters used. */ int count;原创 2020-08-19 20:19:31 · 152 阅读 · 0 评论 -
jdk StringBuilder实现
继承了AbstractStringBuilder类实现了java.io.Serializable, CharSequence接口一、属性二、方法2.1 toString@Override public String toString() { // Create a copy, don't share the array return new String(value, 0, count); }...原创 2020-08-19 19:58:06 · 212 阅读 · 0 评论 -
jdk String类源码解析
一、属性二、方法2.1 substring/** * Returns a string that is a substring of this string. The * substring begins with the character at the specified index and * extends to the end of this string. <p> * Examples: * <blockquote>原创 2020-08-16 15:06:46 · 192 阅读 · 0 评论 -
jdk Comparator接口
方法compare/** * Compares its two arguments for order. Returns a negative integer, * zero, or a positive integer as the first argument is less than, equal * to, or greater than the second.<p> * * In the foregoing description原创 2020-08-16 14:55:25 · 191 阅读 · 0 评论 -
jdk Map接口
一、参数/** * A map entry (key-value pair). The <tt>Map.entrySet</tt> method returns * a collection-view of the map, whose elements are of this class. The * <i>only</i> way to obtain a reference to a map entry is from原创 2020-08-09 14:46:48 · 148 阅读 · 0 评论 -
java11 HashMap原理
二、方法2.1 构造函数/** * Constructs an empty <tt>HashMap</tt> with the specified initial * capacity and load factor. * * @param initialCapacity the initial capacity * @param loadFactor the load factor * @throws I原创 2020-08-09 14:46:04 · 382 阅读 · 1 评论 -
jdk Collections类
二、方法2.1 reverse/** * Reverses the order of the elements in the specified list.<p> * * This method runs in linear time. * * @param list the list whose elements are to be reversed. * @throws UnsupportedOperationExceptio原创 2020-08-09 10:50:04 · 199 阅读 · 0 评论 -
jdk Queue抽象接口
方法1.1 add/** * Inserts the specified element into this queue if it is possible to do so * immediately without violating capacity restrictions, returning * {@code true} upon success and throwing an {@code IllegalStateException} * if no原创 2020-08-08 14:06:29 · 142 阅读 · 0 评论 -
jdk list接口源码解析
方法size/** * Returns the number of elements in this list. If this list contains * more than <tt>Integer.MAX_VALUE</tt> elements, returns * <tt>Integer.MAX_VALUE</tt>. * * @return the number of elements in原创 2020-08-06 16:02:39 · 217 阅读 · 0 评论 -
jdk LinkedList源码解析
一、成员变量1.1 Nodeprivate static class Node<E> { E item; Node<E> next; Node<E> prev; Node(Node<E> prev, E element, Node<E> next) { this.item = element; this.next = next;原创 2020-08-06 12:53:40 · 143 阅读 · 0 评论 -
jdk11 ArrayList源码解析
二、方法2.1 add(添加元素)/** * Appends the specified element to the end of this list. * * @param e element to be appended to this list * @return <tt>true</tt> (as specified by {@link Collection#add}) */ public boolean add原创 2020-08-06 08:19:45 · 325 阅读 · 0 评论 -
java jdk中优先队列的实现
二、方法2.1 offer(添加元素)/** * Inserts the specified element into this priority queue. * * @return {@code true} (as specified by {@link Queue#offer}) * @throws ClassCastException if the specified element cannot be * compared wi原创 2020-08-05 17:58:02 · 369 阅读 · 0 评论