Java Map和字典的介紹
Map是Java中一個(gè)基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu),用于存儲(chǔ)一組key-value的映射關(guān)系。它類似于字典,可以通過(guò)key(鍵)來(lái)獲取value(值)。Map接口是Java集合框架中的一員,提供了一系列的實(shí)現(xiàn)類,包括HashMap、TreeMap等等。 Dictionary是Java早期提供的一種數(shù)據(jù)結(jié)構(gòu),也是用于存儲(chǔ)key-value對(duì)的映射關(guān)系。它和Map概念類似,但是Dictionary是一個(gè)抽象類,只能被繼承而不能被實(shí)例化,也不支持null值的key和value。Java社區(qū)建議使用Map代替Dictionary進(jìn)行編程。 下面我們來(lái)看一些使用Map的例子:
使用Java Map實(shí)現(xiàn)Word Count
import java.util.*; public class WordCount { public static void main(String[] args) { String text = "Hello World, this is a world of Java World"; String[] words = text.split(" "); MapwordCount = new HashMap<>(); for (String word : words) { if (wordCount.containsKey(word)) { int count = wordCount.get(word); wordCount.put(word, count+1); } else { wordCount.put(word, 1); } } System.out.println(wordCount); } }
使用Java Map實(shí)現(xiàn)LRU Cache
import java.util.*; public class LRUCache{ private final int capacity; private final Map cache; public LRUCache(int capacity) { this.capacity = capacity; this.cache = new LinkedHashMap (capacity, 0.75f, true) { @Override protected boolean removeEldestEntry(Map.Entry eldest) { return size() >capacity; } }; } public synchronized V get(K key) { return cache.get(key); } public synchronized void put(K key, V value) { cache.put(key, value); } public synchronized void clear() { cache.clear(); } public synchronized int size() { return cache.size(); } @Override public synchronized String toString() { return cache.toString(); } }
在上面的代碼中,我們使用了LinkedHashMap作為Map的實(shí)現(xiàn)類,并且重寫了removeEldestEntry方法,實(shí)現(xiàn)LRU緩存策略。其中LinkedHashMap中的accessOrder參數(shù)設(shè)置為true,表示按照訪問(wèn)順序排序。