為了提高速度,LinkedHashMap散列化所有的元素,但是在遍歷鍵值對時,卻又以元素的插入順序返回鍵值對(System.out.println()會迭代遍歷該映射,因此可以看到遍歷的結(jié)果)。此外,可以在構(gòu)造器中設(shè)定LinkedHashMap,使之采用基于訪問的最近最少使用(LRU)算法,于是沒有被訪問過的(可被看作需要刪除的)元素就會出現(xiàn)在隊列的前面。對于需要定期清理元素以節(jié)省空間的程序來說,此功能使得程序很容易得以實現(xiàn)。下面就是一個簡單的例子,它演示了LinkedHashMap的這兩種特點:
在輸出中可以看到,鍵值對是以插入的順序進行遍歷的,甚至LRU算法的版本也是如此。但是,在LRU版本中,在(只)訪問過前面六個元素后,最后三個元素移到了隊列前面。然后再一次訪問元素“o”時,它就被移到隊列后端了。
LinkedHashMap平常用的比較少,但是卻是用在相當(dāng)重要的地方,利用其LRU算法可以創(chuàng)建對象池、連接池等等。