我有以下hashmap,它存储字符串键和链接列表值
public HashMap<String, LinkedList<String>> wordIndex = new HashMap<>();
我的wordIndex包含多个链接列表,其中包含单词“algorithms”,因此我编写了以下代码,以查看我的hashmap是否能够找到单词“algorithms”
String getWord(String query) { //query=user input in this case algorithms
if(wordIndex.containsValue(query.toLowerCase()))
{
return "hello"; //should return hello if word is found
}
else
{
return "none";
}
}
但是它始终返回none,这意味着它可以在链表中找到该单词。 那么遍历Hashmaps中链接列表的正确过程是什么。我搜索了但找不到任何答案。
此外,我需要返回所有包含查询字的KEYS(在本例中为“algorithm”)。我似乎无法在hashmap类中找到一个可以做到这一点的函数(或者我看到它但却不理解它)。我是新手的哈希图,你们可以帮助我,指出我正确的方向。
答案 0 :(得分:3)
你不能这样做。如果要检查HashMap中的任何LinkedList中是否有单词,您应该执行以下操作:
String getWord(String query) { //query=user input in this case algorithms
for(LinkedList<String> l : wordIndex.values()) {
if(l.contains(query.toLowerCase())) {
return "hello"; //should return hello if word is found
}
}
return "none";
}
答案 1 :(得分:0)
public boolean containsValue(Object value) {
if (value == null)
return containsNullValue();
Entry[] tab = table;
for (int i = 0; i < tab.length ; i++)
for (Entry e = tab[i] ; e != null ; e = e.next)
if (value.equals(e.value))
return true;
return false;
}
如果查看containsValue方法,您将看到它使用Entry对象等于方法进行匹配,如果您看这个Entry类等于Entry类型以外的方法对象,则返回false。我认为最好的方法是使用链接列表的包含方法,同时迭代每个记录的地图
public final boolean equals(Object o) {
if (!(o instanceof Map.Entry))
return false;
Map.Entry e = (Map.Entry)o;
Object k1 = getKey();
Object k2 = e.getKey();
if (k1 == k2 || (k1 != null && k1.equals(k2))) {
Object v1 = getValue();
Object v2 = e.getValue();
if (v1 == v2 || (v1 != null && v1.equals(v2)))
return true;
}
return false;
}