繁体   English   中英

检索哈希图的键

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM