2016-05-20 12 views
1

私は、JavaでTreeMapを使用して、最近使用されたキャッシュが最小であるキャッシュを構築しています。私がTreeMapを選択したのは、TreeMap.floorEntry(String)メソッドのためです。 キャッシュ(TreeMap)の最大サイズを指定できます。 次に、LRUの追い出しメカニズムを使用したいので、 キャッシュが最大サイズに達したときに、キャッシュする新しいレコードがあるときには、 キャッシュで新しいレコードを追加し、最長のエントリを削除します。Java TreeMapで最大サイズを設定するには?

+0

最大サイズはありません( 'Collection'の最大サイズは、 'Integer.MAX_VALUE = 2^31 - 1'です)。 –

+0

こんにちはAndy、ご意見ありがとうございます。私はLinkedHashMapを使って同様のことをしました – Manos

答えて

0

私はあなたの問題を正しく理解してくれることを願っています。 私はConcurrentSkipListMap(floorEntryメソッドもあります)を使用し、私自身の小さな最大サイズコントロールを実装します。

これは私がどうなるのかです:

int maxSize = 100; 
ConcurrentSkipListMap<String, String> cache = new ConcurrentSkipListMap<>(); 

// Check if max size is reached before inserting something in it. Make some room for new entry. 
while (cache.size() >= maxSize) { 
    cache.pollFirstEntry(); 
} 

それは少しハックですが、仕事をする必要があります。

+0

どのようにFirst Entryを選択しますか?キーに基づいているのですか、最初に追加されたエントリですか? – Manos

+0

@Manosよ、そうです。上記のコードはあなたが望むものとまったく同じものではありません。あなたはあなたがキーとして保管しているものを教えてください、あなたのマップの価値は何ですか?いくつかの例をしてください?あなたが作業する情報が少なすぎます。 – lkallas

+0

鍵はStringであり、String.compareTo()は比較に使用できます。この問題を解決するために、キャッシュがmaxSizeに達すると、マップからランダムなエントリを削除してから挿入します。 – Manos

関連する問題