いいえ、localKeySetはソートされ、普通のセットですされていません。注文を維持したいのであれば、TreeMapの代わりにQueueを使用することをお勧めします(追加のTimeStampの代わりに他のいくつかのパラメータに基づいて並べ替えたい場合を除いて)。そして、このQueueを制御するlocalEntryListenerを実装します。
もう一つのオプションは、TreeSetを使用することです。
public class HazelcastNode {
private static Queue localEntryQueue = new LinkedList<>();
public HazelcastNode(){
HazelcastInstance hz = Hazelcast.newHazelcastInstance();
hz.getMap("hzMap").addLocalEntryListener(new MyLocalMapListner());
}
public static void main(String[] args){
HazelcastNode node = new HazelcastNode();
//Get the Head of the queue which will be the oldest local entry
HazelcastNode.localEntryQueue.peek();
}
private class MyLocalMapListner implements MapListener,EntryAddedListener,
EntryRemovedListener,
EntryUpdatedListener,
EntryEvictedListener,
EntryExpiredListener{
@Override
public void entryAdded(EntryEvent entryEvent) {
HazelcastNode.localEntryQueue.add(entryEvent.getKey());
}
@Override
public void entryEvicted(EntryEvent entryEvent) {
HazelcastNode.localEntryQueue.remove(entryEvent.getKey());
}
@Override
public void entryExpired(EntryEvent entryEvent) {
HazelcastNode.localEntryQueue.remove(entryEvent.getKey());
}
@Override
public void entryRemoved(EntryEvent entryEvent) {
HazelcastNode.localEntryQueue.remove(entryEvent.getKey());
}
@Override
public void entryUpdated(EntryEvent entryEvent) {
}
}
}
ご回答ありがとうございます。私は類似のデザインを最初に持っていましたが、ソートが必要なので、TreeSetを使用しました(問題のタイプミス、修正済み)。しかし、すでに手に入れられているデータ構造で作業を行うことができれば、最適化の方法を考えています。ローカルマップはConcurrentHashMapsですが、私はHazelcastがカスタムマップを 'プラグイン'できる拡張メカニズムを提供すると期待していました。 –
Hazelcastでカスタムマップ/キーセットの実装をプラグインすることはできません。また、Hazelcastは、実際の参照ではなく、keySet /値のコピーを返します。 –