Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查哈希映射和遍历哈希映射中的键的区别_Java_Hash_Hashmap - Fatal编程技术网

Java 检查哈希映射和遍历哈希映射中的键的区别

Java 检查哈希映射和遍历哈希映射中的键的区别,java,hash,hashmap,Java,Hash,Hashmap,我有一个单词列表,每个单词都有相应的分数。我在一个.txt文件的大文本块中梳理并匹配每个单词和单词列表中的单词。txt文件最多可以有10000行文本 当我第一次这样做时,我使用了一种非常野蛮和幼稚的方法将单词列表中的单词与.txt文件进行匹配。虽然我使用了哈希映射,但我没有正确使用哈希映射,还不如将其用作列表。因此,代码是按照以下方式编写的: for(int i=0; i<words.length; i++){ for(int j=0; j<wordListType.size

我有一个单词列表,每个单词都有相应的分数。我在一个.txt文件的大文本块中梳理并匹配每个单词和单词列表中的单词。txt文件最多可以有10000行文本

当我第一次这样做时,我使用了一种非常野蛮和幼稚的方法将单词列表中的单词与.txt文件进行匹配。虽然我使用了哈希映射,但我没有正确使用哈希映射,还不如将其用作列表。因此,代码是按照以下方式编写的:

for(int i=0; i<words.length; i++){
    for(int j=0; j<wordListType.size(); j++){
        Map<String, Integer> hmap = wordListType.get(j).getMap();
        for(Map.Entry<String, Integer> entry : hmap.entrySet()){
            if(words[i].contains(entry.getKey())){
                foo();
            }
        }
    }
}

for(int i=0;i如果我正确获得它,
words[i]
是一个
字符串
。在第一种解决方案中,您将匹配每个以map键作为子字符串的单词。在第二种情况下,您将进行精确匹配

这个:

words[i].contains(entry.getKey())
将匹配每个具有
entry.getKey()
ssubstring的单词。也就是说,它将匹配
alabala
字符串
ala

在这里:

(val = hmap.get(words[k])) != null
哪一个写得更好:

hmap.contains(words[k])

您可以检查映射是否包含与给定单词完全匹配的关键字。在这种情况下,
ala
将与单词
alabala
不匹配。如果您使用的两个if条件不测试相同的内容。让我们举一个例子,其中
words[i]
被“测试”,并且映射包含关键字“测试”:

此条件检查单词[i]是否包含映射键,这意味着将计算if块

if((val = hmap.get(words[k])) != null){
此条件检查映射是否包含字符串单词[k](“tested”),该字符串将计算为false,因为它只包含“test”


我相信对于您的用例,第二个实现给出了您想要的结果。

在哪里设置索引变量
k
(在
hmap.get(words[k]
)?应该是
i
?是打字错误吗?是的,我的实际代码略有不同,所以我在提供示例时忘了更改。谢谢你指出这一点。编辑了我的原始帖子。啊,当然。确实如此。愚蠢的疏忽。非常感谢。如果它解决了你的问题,你能接受答案吗?谢谢:)谢谢。有没有办法完成这种类型的代码(val=hmap.get(words[k]))!=null和contains?我需要先对子字符串进行contains,然后再获取该键的值吗?希望有一种更快的方法让我重新编写我的问题,因为这很混乱。我意识到我基本上是想看看hmap是否包含该单词的子字符串作为其键之一。有没有其他简单的方法han像我第一次使用方法一样反复使用hmap中的所有键?@Nopiforyou我喜欢这个问题-就像我喜欢算法问题一样。但是我认为这是一个完全不同的问题,需要一个第一类的问题。问它。同时我会尝试找出解决它的最佳算法。
if(words[i].contains(entry.getKey())) {
if((val = hmap.get(words[k])) != null){