Java 检查哈希映射和遍历哈希映射中的键的区别
我有一个单词列表,每个单词都有相应的分数。我在一个.txt文件的大文本块中梳理并匹配每个单词和单词列表中的单词。txt文件最多可以有10000行文本 当我第一次这样做时,我使用了一种非常野蛮和幼稚的方法将单词列表中的单词与.txt文件进行匹配。虽然我使用了哈希映射,但我没有正确使用哈希映射,还不如将其用作列表。因此,代码是按照以下方式编写的: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
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){