如何在哈希映射键中找到下一个最小值?

时间:2017-04-27 01:44:21

标签: java java-8 hashmap

我有一个我有地图的场景:

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) 
.... 

问题是我无法从列表中删除条目。

3 个答案:

答案 0 :(得分:2)

使用&#39; KeySet&#39;初始化的TreeSetmap的{​​{1}}添加任意密钥,当filled将其从#Tree;&#39;中删除时,结果TreeSet的第一个元素就是您想要的

答案 1 :(得分:0)

这是你想要实现的吗?从填充数组的前面开始直到找到填充但不在地图中的第一个值?

public int get smallestUnusedValue() {
    for(int i = 0; i < filled.size(); i++)
        if(!map.containsKey(filled.get(i)))
            return i;
}

答案 2 :(得分:0)

您是否需要专门使用HashMapNavigableMap的实现,例如TreeMap,提供了查找&#34;附近的键的方法。一个给定的值,不需要精确的映射。 higherEntry方法似乎可以满足您的需求。