【发布时间】:2017-01-20 00:13:58
【问题描述】:
我有一个用例,我想从多个线程将条目填充到数据结构中,因此它必须是线程安全的,并且在达到特定大小后开始删除旧记录。而且我还想以相同的插入顺序迭代数据结构。
所以我决定在这里使用Guava Cache,但令我惊讶的是,Guava asMap() 方法不会以任何特定顺序返回元素。
private final Cache<Integer, Integer> cache =
CacheBuilder.newBuilder().maximumSize(10)
.removalListener(
RemovalListeners.asynchronous(new CustomListener(), executorService)
).build();
cache.put(1, 1);
cache.put(2, 2);
cache.put(3, 3);
cache.put(4, 4);
cache.put(5, 5);
cache.put(6, 6);
for (Entry<Integer, Integer> entry : cache.asMap().entrySet()) {
System.out.println(entry.getKey() + "=" + entry.getValue());
}
输出:
2=2
6=6
1=1
4=4
3=3
5=5
我可以在这里使用什么其他有效的数据结构,它可以为我保留迭代顺序,并且在达到大小时可靠删除旧记录,并在我的删除侦听器中有一些回调能弄清楚哪些记录被丢弃了吗?
任何示例都会有很大帮助。我正在使用 Java 7,还不能切换到 Java 8。
所以我应该能够在迭代时得到这样的东西,而且它应该自动删除旧记录:
1=1
2=2
3=3
4=4
5=5
6=6
【问题讨论】:
-
您能否详细谈谈您希望如何访问数据结构中的元素?会这样吗?用钥匙?随机?在前面?
-
以相同的顺序插入,所以
1 and 1首先插入,所以我想在迭代时先得到它。编辑了问题。 -
所以你从数据结构中获取的唯一方法就是迭代它?你可以使用队列数据结构
-
是的。顺便说一句,还有其他方法也可以从数据结构中获取吗?只是好奇。
-
是的,Hashmap 之类的东西是将事物配对在一起以进行快速查找的方式
标签: java data-structures guava