LinkedHashMapプロパティ
保存されたハッシュ値シーケンス・HashMapのキーであるとき、およびイテレータトラバーサルが乱れ、そして時には我々は、挿入順にマップが返され、そうのLinkedHashMapを出荷しなければならない必要がある場合、特定の順序で入れるとHashMapの保存には、順不同です生まれました。
原則
LinkedHashMapすぐ外にテーブルベースのHashMapを達成するため、余分な二重にリンクされたリストを維持します。方法newNode、afterNodeRemoval等を実装し、増加又はその内部リストのサブクラスはイテレータインターフェイスを実装維持するために減少したときに、内部ロジックに戻り、図のようにリストデータをリンクさを入れて取り除きます。
LruCache与のLinkedHashMap
、キューバッファが一杯になったときに、非常に単純なLRUキューを使用することによって達成のLinkedHashMap特性は、ヘッドを排除ノードを制限され、要求を取得する各ノードは、その後、ヘッドノードのデータが頻繁に使用されていないキューの最後に配置され、そしてremoveEldestEntryを用いる方法判断と時間でのデータの出し入れ。コードは、パブリッククラスMyLruCache <K、V> {プライベート静的最終フロートhashTableLoadFactor = 0.75Fは以下の通りである。民間のLinkedHashMap <K、V>マップ;プライベートint型cacheSizeの。
public MyLruCache(int cacheSize) {
this.cacheSize = cacheSize;
int hashTableCapacity= (int) (Math.ceil(cacheSize/hashTableLoadFactor)+1);
map=new LinkedHashMap<K,V>(hashTableCapacity,hashTableLoadFactor,true){
@Override
protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
return size() > MyLruCache.this.cacheSize;
}
};
}
public V get(K key){
return map.get(key);
}
public void put(K key,V value){
map.put(key,value);
}
public synchronized int usedEntries() {
return map.size();
}
public synchronized void clear() {
map.clear();
}
public synchronized Collection<Map.Entry<K, V>> getAll() {
return new ArrayList<Map.Entry<K, V>>(map.entrySet());
}
}
复制代码
基準https://juejin.im/post/5a4b433b6fb9a0451705916f侵害により本明細書にした場合、すぐに処理を通知します