Java 如何检查 ArrayList 是否包含 2 个值?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/20755432/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to Check if an ArrayList Contain 2 values?
提问by Yehia Awad
is there any way to check if a collection contain a value or more with better performance than looping twice with contains?
有什么方法可以检查集合是否包含一个或多个值,其性能比使用包含循环两次更好?
in other meaning something that would look like this
换句话说,看起来像这样的东西
person.contains("Joe" || "Jasha");
采纳答案by Bohemian
The implementation of ArrayList.contains()
loops through every element and does an equals()
test, so calling .contains()
twice is inefficient.
实现ArrayList.contains()
遍历每个元素并进行equals()
测试,因此调用.contains()
两次效率低下。
You could write your own loop that check both at once using a compiled regex Patternthat looks for either name at the same time:
您可以编写自己的循环,使用同时查找任一名称的已编译正则表达式模式一次检查两者:
Pattern p = Pattern.compile("Joe|Jasha");
boolean found = false;
for (String s : person) {
if (p.matcher(s).find()) {
found = true;
break;
}
}
回答by Suresh Atta
contains takes only one param
contains 只需要一个参数
if(person.contains("Joe") || person.contains("Jasha")){
// do something
}
If you are worrying about N
number of elements
如果您担心N
元素的数量
String[] items ={"Joe","jon","And So On".....};
for (String item : items ) {
if (person.contains(item)) {
//found
break;
}
}
Edit:
编辑:
That ||
is most helpful in your case, since you have the benefit of Short-circuit_evaluation
这||
对您的情况最有帮助,因为您受益于Short-circuit_evaluation
The second argument is only executed or evaluated if the first argument does not suffice to determine the value of the expression:
仅当第一个参数不足以确定表达式的值时,才执行或评估第二个参数:
回答by Shiju K Babu
You have to search each string.
您必须搜索每个字符串。
UPDATED
更新
List list=new ArrayList();
list.add("Joe");
list.add("Jasha");
if(person.containsAll(list))
{
//do something
}
回答by Infinite Recursion
You can also use regex as follows:
您还可以按如下方式使用正则表达式:
person.toString().matches(".*\b(Joe|Jasha)\b.*");
You will get a boolean value indicating whether it is present or not.
您将获得一个布尔值,指示它是否存在。
回答by Chandrayya G K
Simply use Arrays class
只需使用 Arrays 类
person.containsAll(Arrays.asList("Jasha","Joe"));
回答by awwsmm
You can also do
你也可以这样做
String person1 = "Joe Smith"; // contains "Joe"
String person2 = "Jasha Thompson"; // contains "Jasha"
String person3 = "Jasha Joesephson"; // contains "Joe" and "Jasha"
String person4 = "Steve Smith"; // contains neither
public boolean containsJoeOrJasha(String stringToCheck) {
return !Collections.disjoint(
Arrays.asList(stringToCheck.split(" ")),
Arrays.asList("Joe", "Jasha"));
}
Collections.disjoint returns true if the two collections are disjoint, meaning that they have no elements in common. So...
如果两个集合不相交,则 Collections.disjoint 返回 true ,这意味着它们没有共同的元素。所以...
jshell> containsJoeOrJasha(person1)
==> true
jshell> containsJoeOrJasha(person2)
==> true
jshell> containsJoeOrJasha(person3)
==> true
jshell> containsJoeOrJasha(person4)
==> false