X Tutup
Skip to content

Commit e888497

Browse files
committed
修改图片格式
1 parent a3ffcc3 commit e888497

File tree

3 files changed

+16
-2
lines changed

3 files changed

+16
-2
lines changed

notes/JavaArchitecture/02 Java 集合框架.md

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1474,7 +1474,13 @@ void foo(Map m) {
14741474
> 1. 从`table`的角度看,新的`entry`需要插入到对应的`bucket`里,当有哈希冲突时,采用头插法将新的`entry`插入到冲突链表的头部。
14751475
> 2. 从`header`的角度看,新的`entry`需要插入到双向链表的尾部。
14761476
1477-
[![LinkedHashMap_addEntry.png](https://github.com/CarpenterLee/JCFInternals/raw/master/PNGFigures/LinkedHashMap_addEntry.png)](https://github.com/CarpenterLee/JCFInternals/blob/master/PNGFigures/LinkedHashMap_addEntry.png)
1477+
<div align="center">
1478+
1479+
1480+
1481+
<img src="../pics/LinkedHashMap_addEntry.png" width="700"/></div><br/>
1482+
1483+
14781484
14791485
`addEntry()`代码如下:
14801486
@@ -1519,7 +1525,11 @@ private void addBefore(Entry<K,V> existingEntry) {
15191525
> 1. 从`table`的角度看,需要将该`entry`从对应的`bucket`里删除,如果对应的冲突链表不空,需要修改冲突链表的相应引用。
15201526
> 2. 从`header`的角度来看,需要将该`entry`从双向链表中删除,同时修改链表中前面以及后面元素的相应引用。
15211527
1522-
[![LinkedHashMap_removeEntryForKey.png](https://github.com/CarpenterLee/JCFInternals/raw/master/PNGFigures/LinkedHashMap_removeEntryForKey.png)](https://github.com/CarpenterLee/JCFInternals/blob/master/PNGFigures/LinkedHashMap_removeEntryForKey.png)
1528+
1529+
1530+
<div align="center"> <img src="../pics/LinkedList_remove.png" width="700"/></div><br/>
1531+
1532+
15231533
15241534
`removeEntryForKey()`对应的代码如下:
15251535
@@ -1551,6 +1561,8 @@ final Entry<K,V> removeEntryForKey(Object key) {
15511561
}
15521562
```
15531563
1564+
1565+
15541566
### 5. LinkedHashSet
15551567
15561568
前面已经说过*LinkedHashSet*是对*LinkedHashMap*的简单包装,对*LinkedHashSet*的函数调用都会转换成合适的*LinkedHashMap*方法,因此*LinkedHashSet*的实现非常简单,这里不再赘述。
@@ -1572,6 +1584,8 @@ public class LinkedHashSet<E>
15721584
}
15731585
```
15741586
1587+
1588+
15751589
### 6. LinkedHashMap经典用法
15761590
15771591
*LinkedHashMap*除了可以保证迭代顺序外,还有一个非常有用的用法:可以轻松实现一个采用了FIFO替换策略的缓存。具体说来,LinkedHashMap有一个子类方法`protected boolean removeEldestEntry(Map.Entry<K,V> eldest)`,该方法的作用是告诉Map是否要删除“最老”的Entry,所谓最老就是当前Map中最早插入的Entry,如果该方法返回`true`,最老的那个元素就会被删除。在每次插入新元素的之后LinkedHashMap会自动询问removeEldestEntry()是否要删除最老的元素。这样只需要在子类中重载该方法,当元素个数超过一定数量时让removeEldestEntry()返回true,就能够实现一个固定大小的FIFO策略的缓存。示例代码如下:
5.82 KB
Loading

notes/pics/LinkedHashMap_base.png

7.1 KB
Loading

0 commit comments

Comments
 (0)
X Tutup