我需要检查一个arraylist中的任何值是否存在于另一个arraylist中:
import java.util.ArrayList;
public class SampleCode {
ArrayList<Integer> in = new ArrayList<>();
ArrayList<Integer> is = new ArrayList<>();
public static void main(String[] args) {
new SampleCode().work();
}
public void work(){
in.add(3);in.add(4);in.add(5);
is.add(1);is.add(2);is.add(3);
if(is.containsAll(in)){
System.out.println("It does not contain");
}
}
}
打印“它不包含”。我需要知道是否有办法比较这两个arraylists,如果其他arraylist中存在任何值,它应该返回false
。我知道迭代可以帮助。有没有简单的方法呢?
答案 0 :(得分:6)
我认为你可以使用
说
Returns true if the two specified collections have no elements in common.
所以如果有任何共同的元素,它将返回false。
答案 1 :(得分:1)
试试这个
public void work(){
in.add(3);in.add(4);in.add(5);;
is.add(1);is.add(2);is.add(3);;
ArrayList<Integer> matched = new ArrayList<Integer>(in);
matched.retainAll(is);
if(matched.size()>0){
System.out.println(matched);
}else{
System.out.println("It does not contain");
}
}
答案 2 :(得分:1)
Collection.indexOfSubList(List<?> source, List<?> target)
返回指定的第一个匹配项的起始位置 指定源列表中的目标列表,如果没有,则返回-1 这种情况。
更正式地,返回最低索引i,使得source.subList(i,i + target.size())。equals(target),如果没有这样的索引则返回-1。 (如果target.size()&gt; source.size(),则返回-1。) 此实现使用“强力”技术扫描源列表,依次在每个位置查找与目标的匹配。
Collections.disjoint(Collection<?> c1, Collection<?> c2)
如果两个指定的集合中没有元素,则返回true 常见的。
如果此方法用于不符合收集合同的集合,则必须小心谨慎。实现可以选择迭代任一集合并测试其他集合中的包含(或执行任何等效计算)。如果任一集合使用非标准相等性测试(排序与equals不兼容的SortedSet,或IdentityHashMap的密钥集),则两个集合必须使用相同的非标准相等性测试,否则此方法的结果未定义。 使用对其可能包含的元素有限制的集合时,还必须小心。允许集合实现为涉及他们认为不合格的元素的任何操作抛出异常。为了绝对安全,指定的集合应仅包含两个集合的合格元素的元素。 请注意,允许在两个参数中传递相同的集合,在这种情况下,当且仅当集合为空时,该方法才会返回true。
<强>抛出强>:
NullPointerException
- 如果一个集合包含null元素,并且null不是另一个集合的合格元素。 (可选)NullPointerException - 如果一个集合包含null元素,并且null不是另一个集合的合格元素。 (可选)ClassCastException - 如果一个集合包含的元素类型不符合其他集合的类型。 (可选)
答案 3 :(得分:1)
另一种可能的解决方案:
public static boolean containsNone(List<?> list, List<?> of) {
List<?> temp = new ArrayList<Object>(list);
temp.retainAll(of);
return temp.isEmpty();
}
例如:
List<String> ref = Arrays.asList("w1", "w2", "w3");
List<String> ok = Arrays.asList("w4", "w5");
List<String> ko = Arrays.asList("w1", "w5");
System.out.println(containsNone(ok, ref));
System.out.println(containsNone(ko, ref));
打印:
true
false
答案 4 :(得分:0)
Collections.disjoint(list1, list2);
是你的答案
请参阅收藏文档
答案 5 :(得分:0)
public boolean isListNotOverlapping(List<Integer> yourList1, List<Integer> yourList2) {
for(Integer i : yourList1) {
if (yourList2.contains(i)) {
return false;
}
}
return true;
}