diff --git a/2 List/README.md b/2 List/README.md index 8ce3769..9e4b586 100644 --- a/2 List/README.md +++ b/2 List/README.md @@ -1,15 +1,21 @@ - -## 链表 +# 链表 * 链表 * 双向链表 +* 双向循环链表 -### 链表 +## 链表 这个就不介绍了。重点说下双向链表。 -### 双向链表 +### 扩缩容 + +简单说下编程语言 java, golang中 LinkList的扩缩容的策略。 + + + +## 双向链表 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。 @@ -25,4 +31,12 @@ typedef struct Entry{ ``` +## 双向循环链表 + + + + + + + diff --git a/3 Hash Table/HashMap in Java.md b/3 Hash Table/HashMap in Java.md index 9c81564..fd86e74 100644 --- a/3 Hash Table/HashMap in Java.md +++ b/3 Hash Table/HashMap in Java.md @@ -2,3 +2,47 @@ java 中 hashmap的实现原理。 +``` +public class HashMap extends AbstractMap + implements Map, Cloneable, Serializable { + + static class Node implements Map.Entry { + final int hash; + final K key; + V value; + Node next; + ... + } + + static final class TreeNode extends LinkedHashMap.Entry { + TreeNode parent; // red-black tree links + TreeNode left; + TreeNode right; + TreeNode prev; // needed to unlink next upon deletion + boolean red; + } + + public V put(K key, V value) { + return putVal(hash(key), key, value, false, true); + } + + public V get(Object key) { + Node e; + return (e = getNode(hash(key), key)) == null ? null : e.value; + } + +} +``` + + +### 扩容 + + + + + + + + + +