检索hashmap的键

时间:2011-03-01 10:20:43

标签: java hashmap

有没有办法在使用keyset之后检索散列图的键?我编写了以下代码,我有一个名为map的hashmap,它包含整数键和double值:

    Set<Integer> keys = sorted_map.keySet();
    Object[] weel = new Object[keys.size()];
    Iterator it = keys.iterator();
    int l = 0;
    while(it.hasNext())
    {
        weel[l] = it.next();
    }

现在我有一个包含地图键的数组。但现在我需要将这些键与一些整数进行比较。例如:

              if(weel[1] == 5) 

但由于weel类型是Object,我无法执行上述操作,也无法将其强制转换为int。我怎样才能做到这一点?可能吗?

4 个答案:

答案 0 :(得分:6)

不确定为什么要创建密钥副本,只需使用密钥即可。

你可以做到

List<Integer> keys = new ArrayList<Integer>(sorted_map.keySet());
if (kyes.get(1) == 5)

Integer[] keys = (Integer[]) sorted_map.keySet()
                 .toArray(new Integer[sorted_map.size()]);
if (kyes[1] == 5)

Iterator<Integer> iter = sorted_map.keySet().iterator();
iter.next(); // skip the first.
if(iter.next() == 5);

答案 1 :(得分:3)

为什么不将您的数组声明为Integer[]int[]?在后一种情况下,您甚至可以使用==进行比较。但是,在这种情况下,您也隐式使用取消装箱,如果您有一张巨大的地图,可能会影响性能。

答案 2 :(得分:1)

您的密钥集的类型为Integer(非int),因为您已使用Set正确表示。所以你从数组中获得的是Integer类型的对象,它们不能转换为int。你应该做的是创建一个Integer类型的数组而不是Object,然后在进行比较时,可以使用Integer的intValue()方法将其作为int。

答案 3 :(得分:0)

首先,您不需要使用迭代器来填充您可以在键集上调用.toArray()方法的数组,如下所示:

sortedMap.keySet().toArray();

然后你要做的就是在使用它时将对象数组的每个元素转换为整数(或者你可以在创建时将数组转换为整数数组)

if (((Integer)weel[1]0 == 5){
}

另外,您可能需要注意,您的if语句只包含一个=符号,而且分配不是比较。

修改

在反射时,您还可以使用实际返回类型化数组的toArray方法:

Set<Integer> keySet = new sortedMap.keySet();       
Integer[] weel = {};
weel = keySet.toArray(weel);

然后你将得到一个整数数组,你可以将它与任何其他整数进行比较。