Java 从列表中未列出的HashMap中删除字符串
我有一个包含以下声明的hashMap:Java 从列表中未列出的HashMap中删除字符串,java,Java,我有一个包含以下声明的hashMap: Map<String, Integer> terms = new HashMap<>(); Map terms=newhashmap(); 以及下列名单: List<String> allTerms = new ArrayList<>(); List allTerms=new ArrayList(); hashMap和列表包含字符串 我想删除hashMap中存储的所有未在声明列表中列出的字符串。 更好
Map<String, Integer> terms = new HashMap<>();
Map terms=newhashmap();
以及下列名单:
List<String> allTerms = new ArrayList<>();
List allTerms=new ArrayList();
hashMap和列表包含字符串
我想删除hashMap中存储的所有未在声明列表中列出的字符串。
更好的方法是什么?如果不提供地图的类型信息,就无法说出您的要求。最好还提供有关地图中条目的业务性质和列表内容的信息。
allTerms.forEach(terms::remove)
。对于此错误,我深表歉意。我只是编辑了问题。学校作业对吗?你应该自己尝试学习。如果不提供地图的类型信息,就不可能说出你的要求。最好还提供有关地图中条目的业务性质和列表内容的信息。allTerms.forEach(terms::remove)
。对于此错误,我深表歉意。我只是编辑了问题。学校作业对吗?你应该自己尝试学习。这是一个O(n*m)
解决方案,将列表
复制到集合
将是一个更明智的选择。@Boristeider我在考虑这个解决方案,但是集合
只会删除重复的,对吗?包含
对于集合
来说是O(1)
。您实际上是在重写列表。包含,即O(n)
。此外,该代码是对流和lambda的滥用;但是现在让我们忽略它。@Kittani我知道它的工作原理,但是看看Boris的解决方案。这是一个O(n*m)
解决方案,将列表
复制到集合
将是一个更明智的选择。@Boristeider我正在考虑这个解决方案,但是集合
只会删除重复项,对吗?包含对于集合是O(1)
。您实际上是在重写列表。包含,即O(n)
。此外,该代码是对流和lambda的滥用;“但现在我们还是忽略它吧。”基塔尼我知道它是有效的,但看看鲍里斯的解决方案。
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Test {
static boolean match = true;
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<String, Integer>();
Map<String, Integer> map1 = new HashMap<String, Integer>();
List<String> list = Arrays.asList("Test1", "Test2", "Test3", "Test4", "Test5", "Test6", "Test7");
map.put("Test1", 1);
map.put("Test66", 2);
map.put("Test3", 3);
map.put("Test4", 4);
map.put("Test123", 5);
map.forEach((k, v) -> {
match = false;
list.forEach(s -> {
if (k.equals(s))
match = true;
});
if(match)
map1.put(k,v);
});
map = map1;
map.forEach((k,v)->System.out.println(k));
}
}
Test1
Test4
Test3