[英]Retrieving keys of a hashmap
除了使用键集以外,还有什么方法可以检索哈希图的键? 我编写了以下代码,我有一个名为map的哈希表,它包含整数键和双精度值:
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。 我怎样才能做到这一点? 可能吗?
不确定为什么要创建密钥副本,您可以只使用密钥。
你可以做
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);
为什么不将数组声明为Integer[]
或int[]
? 在后一种情况下,您甚至可以使用==
进行比较。 但是,在这种情况下,您也会隐式使用拆箱,如果地图很大,这可能会影响性能。
您的键集类型为Integer(不是int),因为已正确用Set表示。 因此,您要从数组中删除的是类型为Integer的对象,该类型不能转换为int类型。 您应该做的是创建一个类型为Integer而不是Object的数组,然后进行比较时,可以使用Integer的intValue()方法将其作为int值获取。
首先,您不需要使用迭代器来填充数组,您可以像这样在键集上调用.toArray()方法:
sortedMap.keySet().toArray();
然后,您所要做的就是将对象数组的每个元素转换为使用时的整数(或者您可以在创建数组时将其转换为整数数组)
if (((Integer)weel[1]0 == 5){
}
另外,您可能要注意,您的if语句仅包含一个=多数民众赞成在和分配而不是一个比较。
编辑:
在反射时,您还可以使用toArray方法,该方法实际上返回一个类型化数组:
Set<Integer> keySet = new sortedMap.keySet();
Integer[] weel = {};
weel = keySet.toArray(weel);
您将拥有一个整数数组,可以将其与任何其他整数进行比较。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.