我有一个我有地图的场景:
BiMap <Integer, String> map;
和跟踪处理的索引的列表。
List<Integer> filled;
在处理填充列表包含密钥的同时,我应该从地图中找到已经不在填充列表中的下一个最小密钥。
有人可以告诉我,如果不进行多次迭代,有没有一种简单的方法可以做到这一点?
for (int i =0 ;i <size; i++) {
if(map.contiansKey(i)) {
Integer min = list.contains(i) ? getNextMinFrom(map, filled) : null;
if min != null ?System.out.println(map.get(min)) : continue;
}
}
例如:
Filled - 0, 4, 5, 6
Map - (1,dfs) (4,efs) (5,sdfs)
in the 0 th iteration.. output - dfs (1 is min)
in 4th iteration ... output shoudl be 4efs (4 is the next min)
....
问题是我无法从列表中删除条目。
答案 0 :(得分:2)
使用&#39; KeySet&#39;初始化的TreeSet
您map
的{{1}}添加任意密钥,当filled
将其从#Tree;&#39;中删除时,结果TreeSet
的第一个元素就是您想要的1} p>
答案 1 :(得分:0)
这是你想要实现的吗?从填充数组的前面开始直到找到填充但不在地图中的第一个值?
public int get smallestUnusedValue() {
for(int i = 0; i < filled.size(); i++)
if(!map.containsKey(filled.get(i)))
return i;
}
答案 2 :(得分:0)
您是否需要专门使用HashMap
? NavigableMap
的实现,例如TreeMap
,提供了查找&#34;附近的键的方法。一个给定的值,不需要精确的映射。 higherEntry
方法似乎可以满足您的需求。