Java 检查列表是否包含多个元素的方便方法
如何检查字符串列表是否同时包含某些特定字符串,而不必执行多个包含操作 例如,类似这样的事情:Java 检查列表是否包含多个元素的方便方法,java,string,list,Java,String,List,如何检查字符串列表是否同时包含某些特定字符串,而不必执行多个包含操作 例如,类似这样的事情: if (templist.contains("aaa") && templist.contains("bbb")) { } 你可以用 List.containsAll功能实际上可以满足您的需求。但是,使用列表类型的containsAll可能会降低性能,因为顺序是O(NK),其中N是列表的元素数,K是目标字符串数。尝试使用哈希集来提高性能: HashSet<String&g
if (templist.contains("aaa") && templist.contains("bbb")) {
}
你可以用
List.containsAll
功能实际上可以满足您的需求。但是,使用列表类型的containsAll
可能会降低性能,因为顺序是O(NK)
,其中N
是列表的元素数,K是目标字符串数。尝试使用哈希集来提高性能:
HashSet<String>set = new HashSet<>(list);
if(set.containsAll(Arrays.asList("asd", "efg")))
// do my job;
HashSetset=新的HashSet(列表);
if(set.containsAll(Arrays.asList(“asd”、“efg”))
//做好我的工作;
因为,为基本操作(
add、remove、contains和size
)提供了恒定的时间性能。由于containsAll
固有地使用contains
函数来查找元素,因此可以预期顺序为O(N+K)
如果我这样做,这意味着aaa和bbb必须存在于列表中,对吗@Alex@user2598911:阅读javadoc。它解释了该方法的作用:正确的点,但不要忘记从第一个列表创建哈希集
,也需要更多的时间和内存。因此,如果OP需要多次检查containsAll
,那么您确实是对的。@Alex,我提到的顺序是O(N+K)
,其中包括从列表创建集合的时间:O(N)
part.:)没错,我误解了你的答案。事实上,一个简单的基准测试表明,对于一次测试,从第一个列表创建一个HashSet并检查containsAll对于第一个调用来说显然要长一些,然后速度会快很多。
HashSet<String>set = new HashSet<>(list);
if(set.containsAll(Arrays.asList("asd", "efg")))
// do my job;