HashMap1.8源码解读 | 记忆碎片



HashMap1.8源码解读 | 记忆碎片

HashMap是Map的一个Hash表类型的实现,由于Hash表的常数时间内的寻址特性,使得HashMap可以在常数的时间内执行get(key), set(key, value)方法。HashMap支持存储key和value为null的元素。

HashMap有两个非常重要的初始化参数:initial capacity和load factor。initial capacity决定了存储hash(key)的返回值的bucket。因为HashMap是使用了数组加链表的形式进行元素的存储的(1.8之后增加了红黑树的支持,当链表长度大于8之后,会将链表进行树化)。

load factor是另一个重要的指标,它标示了这个HashMap什么时候需要扩容,默认值是0.75.举个例子,假如初始容量为100,则当hash(key)的返回值达到75个的时候,该HashMap需要扩容,并rehash,扩容后的大小是扩容前的两倍。load factor只和填充的bucket有关,而和该bucket对应的存储了多少个Node无关,即使该bucket只存了一个,也会将填充数+1。因此,如过initial capacity * load facotr > entry数量,则HashMap不会进行rehash。因此,如果预先知道entry的数量,计算相应的capacity值,有利于提高存取效率。


Read full article from HashMap1.8源码解读 | 记忆碎片


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts