Java 在HashMap中使用键而不使用迭代器检索值
我想根据HashMap中的键检索值。我可以使用下面的代码从hashmap中获取基于键的值。我得到了完美的结果。我相信每次从1000+记录中循环一个值都不是一个好主意。它使应用程序的速度慢得多 下面是一组带有for循环的代码Java 在HashMap中使用键而不使用迭代器检索值,java,android,hashmap,Java,Android,Hashmap,我想根据HashMap中的键检索值。我可以使用下面的代码从hashmap中获取基于键的值。我得到了完美的结果。我相信每次从1000+记录中循环一个值都不是一个好主意。它使应用程序的速度慢得多 下面是一组带有for循环的代码 HashMap<Integer, LabelModel> labelHashMap = gson.fromJson(storedHashMapString, type); for(Map.Entry<Integer, LabelModel>
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();
}
}
}
HashMap labelHashMap=gson.fromJson(storedHashMapString,类型);
for(Map.Entry:labelHashMap.entrySet())
{
LabelModel label=entry.getValue();
key=label.getKey();
if(key!=null&&!key.isEmpty())
{
if(关键同等信号情况(“请选择省”))
{
english_label=label.getEnglish();
阿拉伯文标签=label.getArabic();
}
}
}
我不想让我的应用程序变慢。因此,我更愿意直接使用key来检索值,而不使用迭代器或for循环。我怎样才能做到这一点
我们将不胜感激
if(labelHashMap.get("something") != null){ code }
如果您试图用一个不存在的键获取一个值,那么哈希映射将简单地返回null。我认为不可能直接这样做,但是您可以对整个映射进行初始传递,并将其转换为使用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-reIndex(HashMap-labelMap){
Map reIndexedLabelMap=新HashMap();
对于(Map.Entry:labelMap.entrySet()){
LabelModel label=entry.getValue();
String key=label.getKey();
reIndexedLabelMap.put(key.toLowerCase(),label);
}
返回reIndexedLabelMap;
}
然后,您可以使用此新对象通过其字符串键快速获取任何其他标签:
Map<String, LabelModel> reIndexed = reIndex(labeHashlMap);
reIndexed.get("please_select_governorate");
reIndexed.get("what_ever_else");
Map-reIndex=reIndex(labeHashlMap);
重新编制索引。获取(“请选择省”);
重新编制索引。获取(“还有什么”);
假设键在大小写方面是唯一的。我认为您应该进行初始传递,即在JSON上迭代。因为从JSON到HashMap的映射也是迭代的,这是可以避免的。我可以知道投票失败的原因吗?你的问题让人困惑,你应该更清楚你想要实现什么。你问这个问题的方式已经让两个人误解并回答错误了。@Oleg希望你现在理解了这个问题我第一次理解了。它仍然让人困惑,当你说HashMap中的
键时,它意味着映射的键如果你想要基于键的属性的东西,那么映射的值应该更加明确。正如@EJP所说的,您应该创建所需的映射。使用当前地图,您所能做的就是循环。您的意思是编辑您的问题?说得更清楚些?你的代码无法编译。OP的当前键是一个整数
。谢谢@Oleg这是什么?非常感谢@evan在这里出错。表达式应为映射reIndex(HashMap labelMap)