【发布时间】:2018-04-23 11:02:25
【问题描述】:
是否有任何 HashMap 实现有界并在达到限制时删除最小映射值?
例如,
int size = 3;
Map<Object, Integer> map = new HashMap<>(size);
Object[] objects = {'a', 'a', 'a', 'b', 'c', 'c', 'd'};
for (Object o : objects) {
if (map.containsKey(o)) {
map.put(o, map.get(o) + 1);
} else {
map.put(o, 1);
}
}
在此操作之后,我将拥有地图:
{{a,3},{c,2},{d,1}}
顺序不一定要保留,注意 b 被删除了,因为当 d 被插入时,映射将是满的,并且具有最小值的条目被删除。
【问题讨论】:
-
你能给我们举个例子并澄清一下吗?请注意,地图没有排序,所以到底想要什么?
-
刚刚更新问题
-
所以它也可以是
{{a,3},{b,1},{d,1}}注意{b,1}否? -
如果添加
{e,0}会被删除{d,1}或{e,0}吗? -
这基本上是一个带有边界的发生计数器。因此,较新的条目将始终具有
1的值,这始终使最后一个条目可能会被删除。 如果您想在插入前删除地图中的最小值,请说明。我看到的问题是,一旦每个键的值 > 1。keySet永远不会改变,因为最小值始终是最新添加的。
标签: java collections hashmap