使用键检索值而不使用HashMap中的迭代器

时间:2017-10-14 04:33:42

标签: java android hashmap

我想根据 HashMap 中的键检索值。我可以使用下面的代码从 hashmap 获取基于密钥的值。我得到了完美的结果。我相信每次循环来自 1000+条记录的值都不是一个好主意。它使应用程序慢得多。

以下是带有for循环的一堆代码。

 HashMap<Integer, LabelModel> labelHashMap = gson.fromJson(storedHashMapString, type);

    for(Map.Entry<Integer, LabelModel> entry:labelHashMap.entrySet())
    {
        LabelModel label = entry.getValue();
        key = label.getKey();
        if(key != null && !key.isEmpty())
        {
            if(key.equalsIgnoreCase("please_select_governorate"))
            {
                english_label = label.getEnglish();
                arabic_label = label.getArabic();
            }
        }
    }

我不想让我的应用程序变慢。所以,我更喜欢在不使用迭代器或循环的情况下直接在密钥的帮助下检索值。我怎样才能做到这一点?

帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

我不认为可以直接进行,但您可以对整个地图进行初始传递,并将其转换为使用sting键作为键的地图。至少这种方式你只需要遍历整个值集一次。

所以如果你使用像

这样的方法
Map<String, LabelModel> reIndex(HashMap<Integer, LabelModel> labelMap) {
    Map<String, LabelModel> reIndexedLabelMap = new HashMap<>();
    for(Map.Entry<Integer, LabelModel> entry:labelMap.entrySet()) {
        LabelModel label = entry.getValue();
        String key = label.getKey();
        reIndexedLabelMap.put(key.toLowerCase(), label); 
    }
    return reIndexedLabelMap; 
}

然后,您可以使用此新对象快速抓取任何其他标签的字符串键:

Map<String, LabelModel> reIndexed = reIndex(labeHashlMap);
reIndexed.get("please_select_governorate");
reIndexed.get("what_ever_else");

假设密钥在大小写方面是唯一的。

答案 1 :(得分:0)

if(labelHashMap.get("something") != null){ code }

如果您尝试使用不存在的键获取值,则哈希映射将仅返回null。

答案 2 :(得分:0)

我认为你应该做一个初始传递,即迭代JSON。因为从JSON到HashMap的映射也是迭代的,你可以避免。