集合源码
集合源码
槑!
这个作者很懒,什么都没留下…
展开
-
【集合源码系列】TreeSet源码解析
TreeSetNavigableSet 定义了一些有方向的操作数据结构private transient NavigableMap<E,Object> m;// Dummy value to associate with an Object in the backing Mapprivate static final Object PRESENT = new Object();构造方法TreeSet(NavigableMap<E,Object> m) {原创 2020-09-30 11:50:05 · 247 阅读 · 0 评论 -
【集合源码系列】HashSet源码解析
HashSetHashSet ,基于 HashMap 的 Set 实现类。数据结构// HashSet 只有一个属性,那就是 mapprivate transient HashMap<E, Object> map;// 因为 HashSet 没有 value 的需要,所以使用一个统一的 PRESENT 即可private static final Object PRESENT = new Object();构造方法public HashSet() { map =原创 2020-09-30 11:49:42 · 260 阅读 · 0 评论 -
【集合源码系列】HashTable源码解析
HashTable区别 HashMap线程安全Hashtable 是线程安全的,HashMap 不是线程安全的。Hashtable 所有的元素操作如put-get等都是 synchronized 修饰的,而 HashMap 并没有。public synchronized V put(K key, V value);public synchronized V get(Object key);// ...性能优劣既然 Hashtable 是线程安全的,每个方法都要阻塞其他线程,所以 Has原创 2020-09-29 17:29:57 · 230 阅读 · 0 评论 -
【集合源码系列】TreeMap中子Map源码解析
范围查找在 SortedMap 接口中,定义了按照 key 查找范围,返回子 SortedMap 结果的方法#subMap(K fromKey, K toKey)#headMap(K toKey)#tailMap(K fromKey)在 NavigableMap 中,定义了按照 key 查找范围,返回子 NavigableMap 结果的方法:#subMap(K fromKey, K toKey)#subMap(K fromKey, boolean fromInclusive, K toK原创 2020-09-29 17:29:24 · 342 阅读 · 0 评论 -
【集合源码系列】TreeMap其余方法源码解析
查找元素单个元素public V get(Object key) { // 获得 key 对应的 Entry 节点 Entry<K,V> p = getEntry(key); // 返回 value 值 return (p == null ? null : p.value);}final Entry<K,V> getEntry(Object key) { // 不使用 comparator 查找 // Offload compar原创 2020-09-29 17:29:00 · 229 阅读 · 0 评论 -
【集合源码系列】TreeMap核心方法源码解析
TreeMapNaviableMap 定义了一些有方向操作红黑树每个节点要么是红色,要么是黑色。根节点必须是黑色红色节点不能连续(也即是,红色节点的孩子和父亲都不能是红色)。对于每个节点,从该点至null(树尾端)的任何路径,都含有相同个数的黑色节点。数据结构// key 排序器private final Comparator<? super K> comparator;// 红黑树的根节点private transient Entry<K,V>原创 2020-09-29 17:28:33 · 563 阅读 · 0 评论 -
【集合源码系列】LinkedHashMap源码解析
LinkedHashMapLinkedHashMap 继承自 HashMap 类,基本上没有重写 HashMap 的方法,只是把 HashMap 空实现的预留拓展点实现了。数据结构Map 拓展属性/** * 头节点。 * * 越老的节点,放在越前面。所以头节点,指向链表的开头 */transient LinkedHashMap.Entry<K,V> head;/** * 尾节点 * * 越新的节点,放在越后面。所以尾节点,指向链表的结尾 */transi原创 2020-09-29 17:28:08 · 267 阅读 · 0 评论 -
【集合源码系列】HashMap源码补充
迭代器1、Map 未实现迭代器接口,需要转换成集合keySettransient Set<K> keySet;public Set<K> keySet() { // 获得 keySet 缓存 Set<K> ks = keySet; // 如果不存在,则进行创建 if (ks == null) { ks = new KeySet(); keySet = ks; } return k原创 2020-09-29 17:27:12 · 150 阅读 · 0 评论 -
【集合源码系列】HashMap其余方法源码解析
移除元素移除单个元素public V remove(Object key) { Node<K,V> e; // hash(key) 求哈希值 return (e = removeNode(hash(key), key, null, false, true)) == null ? null : e.value;}final Node<K,V> removeNode(int hash, Object key, Object value原创 2020-09-29 17:26:41 · 179 阅读 · 0 评论 -
【集合源码系列】HashMap核心方法源码详解
HashMap数据结构// 底层存储的数组transient Node<K,V>[] table;// 调用 `#entrySet()` 方法后的缓存transient Set<Map.Entry<K,V>> entrySet;// key-value 的键值对(映射)数量transient int size;// HashMap 的修改次数transient int modCount;/** * 阀值 * * 如果 table原创 2020-09-29 17:26:15 · 250 阅读 · 0 评论 -
【集合源码系列】LinkedList源码解析
LinkedListjava.util.Deque 接口,提供双端队列的功能,LinkedList 支持快速的在头尾添加元素和读取元素,所以很容易实现该特性。继承了 java.util.AbstractSequentialList 抽象类,它是 AbstractList 的子类,实现了只能连续访问“数据存储”,基于迭代器顺序遍历后,从而实现后续的操作。例如 #get(int index)、#add(int index, E element) 等等随机操作的方法。数据结构// 链表大小原创 2020-09-29 17:25:50 · 247 阅读 · 0 评论 -
【集合源码系列】ArrayList源码解析
ArrrayListjava.util.RandomAccess 接口,表示 ArrayList 支持快速的随机访问数据结构transient Object[] elementData;// 实际存储数据的多少private int size;构造方法指定大小// 初始化长度为0时,给elementData赋值的空数组private static final Object[] EMPTY_ELEMENTDATA = {};public ArrayList(int init原创 2020-09-29 17:25:19 · 1500 阅读 · 0 评论