如何找到存储在链表中的值,而不是存储在hashmap中

时间:2014-11-26 12:44:01

标签: java linked-list hashmap

我有以下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类中找到一个可以做到这一点的函数(或者我看到它但却不理解它)。我是新手的哈希图,你们可以帮助我,指出我正确的方向。

2 个答案:

答案 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;
    }