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的副本,而不是实际的引用。 –