有没有办法在使用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。我怎样才能做到这一点?可能吗?
答案 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);
然后你将得到一个整数数组,你可以将它与任何其他整数进行比较。