
jdk源码
文章平均质量分 80
zhongrui_fzr
公众号:step in 机器学习
github主页:https://zrfan.github.io/
展开
-
JDK1.8 HashMap中resize()方法解释
JDK1.8 HashMap中resize()方法解析 * 初始化或者是将table大小加倍。如果为空,则按threshold分配空间,否则,加倍后,每个容器中的元素在新table中要么呆在原索引处,要么有一个2的次幂的位移 * @return the table */ final Node[] resize() { Node[] oldTab原创 2016-04-25 15:30:02 · 3239 阅读 · 3 评论 -
从源码理解HashSet.java
package java.util;import java.io.InvalidObjectException;/** * HashSet实现了Set接口,背后由一个哈希表支持(事实上是一个HashMap实例)。 * 不保证元素迭代顺序,更不保证顺序不会随时间变化,允许空值null * HashSet提供常数时间的基本操作add,remove,contains和size,假设哈希函数原创 2016-05-07 11:04:08 · 1196 阅读 · 0 评论 -
JDK1.8源码学习之ConcurrentHashMap.java
jdk1.8源码学习之并发HashMap————ConcurrentHashMap.javapackage java.util.concurrent;import java.io.ObjectStreamField;import java.io.Serializable;import java.lang.reflect.ParameterizedType;import java.la原创 2016-04-22 12:50:04 · 2163 阅读 · 1 评论 -
JDK1.8源码学习之HashSet.java
jdk1.8源码学习之HashSet.javapackage java.util;import java.io.InvalidObjectException;public class HashSet extends AbstractSet implements Set, Cloneable, java.io.Serializable{ static final原创 2016-04-22 12:52:44 · 1079 阅读 · 0 评论 -
对于给定数字返回最小2次幂
JDK中HashMap.java中有一个函数 static final int tableSizeFor(int cap){ int n = cap -1; n |= n >>> 1; n |= n >>> 2; n |= n >>> 4; n |= n >>> 8; n |= n >>> 16; retur原创 2016-04-22 15:35:10 · 3402 阅读 · 0 评论 -
从源码理解WeakHashMap.java
package java.util;import java.lang.ref.WeakReference;import java.lang.ref.ReferenceQueue;import java.util.concurrent.ThreadLocalRandom;import java.util.function.BiConsumer;import java.util.func原创 2016-05-15 22:05:19 · 1001 阅读 · 1 评论 -
从源码理解LinkedHashMap.java
package java.util;import java.util.function.Consumer;import java.util.function.BiConsumer;import java.util.function.BiFunction;import java.io.IOException;import HashMap.Node;/** * 哈希表和链表实现Ma原创 2016-05-04 19:43:12 · 2394 阅读 · 0 评论 -
从源码理解LinkedList.java
package java.util;import java.util.function.Consumer;/** * List和Deque接口的双向链表实现,实现了所有可选接口,允许空值null * 支持所有双向链表应该支持的操作,深入链表的操作都是从链表头遍历到链表尾 * 该实现不支持并发。多线程访问,至少一个线程修改列表结构时,需要外部同步,如: * List list = C原创 2016-05-05 21:33:38 · 1747 阅读 · 0 评论 -
从源码理解TreeMap.java
从源码理解TreeMap.javapackage java.util;import java.io.Serializable;import java.util.function.BiConsumer;import java.util.function.BiFunction;import java.util.function.Consumer;/** * 基于红黑树的Naviga原创 2016-04-29 21:03:56 · 2466 阅读 · 2 评论 -
Java中如何创建不可变对象
class:Java中class确切的表示为一个类object:Java中Object确切的表示为一个对象,也称为类的实例如果一个类被设计成不可变的类 ,那么这个类的实例化对象也是不可变的。不可变类:当你获得这个类的一个实例引用时,你不可以改变这个实例的内容。不可变对象: 一旦一个类的实例化对象被创建并初始化,那么它就不可以被改变。可以调用访问器方法(getter原创 2016-04-22 17:18:52 · 7138 阅读 · 1 评论 -
HashMap中get(Object key)方法实现
jdk1.8 HashMap.java中获取指定关键字对应的值value方法get(Object key) /* 返回指定关键字的值value,没有则返回null */ public V get(Object key) { Node e; return (e = getNode(hash(key), key)) == null ? n原创 2016-04-22 21:15:41 · 5725 阅读 · 1 评论 -
HashMap中的put(Object key, Object value)方法实现
HashMap中的put(Object key, Object value)方法实现/** * 实现Map.put及其相关方法 * @param hash hash for key * @param key the key * @param value the value to put * @param onlyIfAbsent 若为 true原创 2016-04-22 21:57:02 · 3824 阅读 · 0 评论 -
JDK1.8源码中的设计模式
1. 迭代器与组合模式(Iterator)1.1 Collection.iterator()集合(Collection)指的是一群对象,其存储方式可以是各式各样的数据结构。 如何能让客户遍历你的对象而又无法窥视你存储对象的方式——利用迭代器(iterator)java.util.Iterator来封装“遍历集合内的每个对象的过程”。//忽略集合实现方式(列表、数组、散列表)封装对象遍历publi原创 2016-05-17 21:37:33 · 5094 阅读 · 1 评论 -
JDK1.8源码中的编程习惯
1.如果指定了toString()返回值的格式,则应该提供一个对应的静态工厂方法1.1BigInteger.toString()/* * Returns the String representation of this BigInteger in the * given radix.* / public String toString(int radix) {/** * Returns th原创 2016-05-16 22:18:04 · 4866 阅读 · 1 评论 -
HashMap中红黑树的查找函数find()实现
//HashMap中红黑树的查找函数find()实现/** * 调用树的find()函数 */ final TreeNode getTreeNode(int h, Object k) { return ((parent != null) ? root() : this).find(h, k, null);原创 2016-04-25 17:22:49 · 5125 阅读 · 3 评论 -
HashMap中红黑树操作实现
// 红黑树操作方法实现, 从CLR引入 static TreeNode rotateLeft(TreeNode root, TreeNode p) { //左旋 TreeNode r, pp, rl; if (p != nu原创 2016-04-25 17:42:25 · 2683 阅读 · 0 评论 -
从源码理解HashMap
package java.util;import java.io.IOException;import java.io.InvalidObjectException;import java.io.Serializable;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import ja原创 2016-04-25 17:47:53 · 3005 阅读 · 3 评论 -
JDK源码学习之TreeMap.java分析
TreeMap源码分析——基础分析 常见的数据结构有数组、链表、树。集合类中有基于数组的ArrayList,基于链表的LinkedList,还有链表和数组结合的HashMap。 Treemap基于红黑树实现。查看“键”或“键值对”时,他们会被排序(次序 由Comparable或Comparator决定)。 TreeMap的特点在于,所得到的结果是经过排序的。TreeMap是唯原创 2016-04-28 22:36:32 · 941 阅读 · 0 评论 -
从源码理解Hashtable.java
package java.util;import java.io.*;import java.util.concurrent.ThreadLocalRandom;import java.util.function.BiConsumer;import java.util.function.Function;import java.util.function.BiFunction;/*原创 2016-05-11 20:11:38 · 1146 阅读 · 5 评论 -
Java泛型理解
一、Java泛型引入 java泛型的应用可以提高的代码的复用性,同时泛型提供了类型检查,减少了数据的类型转换,同时保证了类型安全。 泛型如何保证类型安全: List list = new ArrayList(); list.add("abc"); list.add(new Integer(1)); //可以通过编译 for原创 2016-05-03 17:37:46 · 850 阅读 · 0 评论 -
从源码理解ArrayList.java
从源码理解ArrayList.javapackage java.util;import java.util.function.Consumer;import java.util.function.Predicate;import java.util.function.UnaryOperator;/** * 可变数组实现了List接口,实现了所有列表操作,允许空值null。还提供了原创 2016-05-04 16:07:39 · 2136 阅读 · 0 评论 -
JDK1.8源码学习之 HashMap.java
///JDK1.8源码学习之HashMap.javapackage java.util;import java.io.IOException;import java.io.InvalidObjectException;import java.io.Serializable;import java.lang.reflect.ParameterizedType;import java.原创 2016-04-20 15:31:43 · 1487 阅读 · 0 评论 -
Java中mutable对象和immutable对象的区别
今天读jdk源码中Map.java时看到一句话:“great care must be exercised if mutable objects are used as map keys”;第一次知道mutable对象这个概念,google了一下,维基百科定义如下:“In object-oriented and functional programming, an immutable原创 2016-04-20 17:03:50 · 20357 阅读 · 0 评论 -
JDK1.8源码学习之Map.java
package java.util;import java.util.function.BiConsumer;import java.util.function.BiFunction;import java.util.function.Function;import java.io.Serializable;/** * 一个可以将关键字映射为值的对象; * 一个map可以包含重复原创 2016-04-21 14:12:12 · 3250 阅读 · 1 评论 -
Java 哈希机制
通过分析HashMap和HashSet源码分析其Hash存储机制 对于HashSet而言,系统采用hash算法决定集合元素的存储位置,这样可以保证能快速存、取集合元素; 对于HashMap而言,系统key-value当成一个整体进行处理,系统总是根据Hash算法来计算key-value的存储位置,这样可以保证能快速存、取Map的key-value对。 虽然集合号称存储的是Ja原创 2016-04-21 15:52:08 · 1811 阅读 · 0 评论 -
从源码理解Stack.java
package java.util;/** * Stack类表示了后进先出(LIFO)的一个容器对象。Stack继承自Vector并扩展了五个操作,使得Vector可以被看作是一个Stack。 * 常用的push和pop,以及获取栈顶元素的peek,测试栈是否为空的empty,一个搜索操作search并返回其与栈顶的距离 * 第一次创建的时候,栈中没有元素 * 更丰富更兼容的LIFO操原创 2016-05-08 12:11:22 · 795 阅读 · 0 评论