0
IMap的localkeyset是否已排序?或者,無論如何,我可以代理支持數據結構進行排序嗎?Hazelcast IMap localkeyset sorting
我在IMap中存儲臨時密鑰,並不時尋找最早的本地密鑰。到目前爲止,我正在做一個新的TreeSet(imap.localKeyset()),但是,想知道是否可以讓本地支持數據結構自己排序。
感謝, Sutanu
IMap的localkeyset是否已排序?或者,無論如何,我可以代理支持數據結構進行排序嗎?Hazelcast IMap localkeyset sorting
我在IMap中存儲臨時密鑰,並不時尋找最早的本地密鑰。到目前爲止,我正在做一個新的TreeSet(imap.localKeyset()),但是,想知道是否可以讓本地支持數據結構自己排序。
感謝, Sutanu
沒有,localKeySet不排序,只是一個普通的設置。如果你想維護順序,我寧願使用隊列而不是TreeMap(除非你想根據其他參數對它進行排序而不是添加TimeStamp),並實現一個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/values的副本,而不是實際的引用。 –