Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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_String_List - Fatal编程技术网

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;