gpt4 book ai didi

java - 即使 containsKey() 返回 true,从 HashMap 检索时也会出现空指针异常

转载 作者:太空宇宙 更新时间:2023-11-04 15:15:26 24 4
gpt4 key购买 nike

我一直在开发一个 Android 吉他应用程序,目前我在使用 HashMap 时遇到了一些问题。

总而言之,当我尝试使用 get(key)HashMap 检索值时,我遇到了 空指针异常 containsKey(key) 返回该键的 true

具体来说,我有一个类的实例_currentPreset,它有一个名为_maxCoordRangeHashMap,它在类中初始化如下:

private Map<String, Float> _maxCoordRange = new HashMap<String, Float>();

该参数在类的构造函数中不会被修改。相反,只能通过以下方法修改:

public void setMaxCoordRange(String parName, float value) {
_maxCoordRange.put(parName, value);
}

访问者:

public float getMaxCoordRange(String parName) {
return _maxCoordRange.get(parName);
}

创建 _currentPreset 实例后,我为 _maxCoordRange map 设置一些值,如下所示:

for (int i = 0; i < _currentPreset.getCoordiates().size(); i++) {       
_currentPreset.setMaxCoordRange(_currentPreset.getParNames().get(i), 0.75f);
}

在代码的其他部分,我执行以下操作:

if(_currentPreset.getMaxCoordRange().containsKey(pareterName)){
cord.setMaxValueCoord(_currentPreset.getMaxCoordRange(pareterName));
}

这是奇怪的部分。当我尝试使用 getMaxCoordRangeHashMap 检索与 pareterName 对应的值时,出现空指针异常,尽管 containsKey(key ) 返回 true。

我做了一些调试,发现了一些对我来说相当奇怪的东西。当我将值放入 map 中的表达式标记中(在 Eclipse 中处于 Debug模式时)时,表格如下所示:

table   HashMap$HashMapEntry[16]  (id=829660787832) 
[0] null
[1] null
[2] null
[3] null
[4] null
[5] null
[6] null
[7] null
[8] HashMap$HashMapEntry (id=829660788568)
[9] HashMap$HashMapEntry (id=829660786456)
[10] HashMap$HashMapEntry (id=829660787920)
[11] HashMap$HashMapEntry (id=829660788376)
[12] HashMap$HashMapEntry (id=829660787448)
[13] HashMap$HashMapEntry (id=829660787640)
[14] HashMap$HashMapEntry (id=829660786840)
hash 789729998
key "Test Par3" (id=829660737240)
next HashMap$HashMapEntry (id=829660786144)
hash 789729854
key "Test Par1" (id=829660736816)
next null
value Float (id=829660786088)
value Float (id=829660786824)
[15] HashMap$HashMapEntry (id=829660787088)
hash 789729999
key "Test Par4" (id=829660737376)
next HashMap$HashMapEntry (id=829660786648)
hash 789729855
key "Test Par2" (id=829660737104)
next null
value Float (id=829660786632)
value Float (id=829660787016)

应该有 10 个值,确实有​​,但其中 2 个位于元素 14 和 15 的 next 字段中。我读到,这是 hashMap 排列数据的方式,以便效率更高,但这难道不是我无法检索值的原因吗?

抱歉提供了这么多信息,但我真的不知道问题出在哪里。我以前用过HashMap,没有遇到这个问题。

关于如何解决这个问题并最终从 map 中获取我的值有什么想法吗?

最佳答案

可能您正在使用带有索引和字符串的“get()”。

在这里,您假设索引与您的表线性匹配。正如您的调试所示,它们没有。您已将其设置为通过字符串访问,但您正在使用索引。

for (int i = 0; i < _currentPreset.getCoordiates().size(); i++) {       
_currentPreset.setMaxCoordRange(_currentPreset.getParNames().get(i), 0.75f);
}

在这里,您使用的是 pareterName,无论它是什么。我希望它是一个字符串

if(_currentPreset.getMaxCoordRange().containsKey(pareterName)){
cord.setMaxValueCoord(_currentPreset.getMaxCoordRange(pareterName));
}

为了使 HashMap 有效,请坚持通过您定义的字符串访问数据:

关于java - 即使 containsKey() 返回 true,从 HashMap 检索时也会出现空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20888170/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com