检查这2个列表是否相等的通用和最简单的方法是什么:
List<String[]> list1=new ArrayList<String[]>();
String[] s1={"1","2"};
String[] s2={"3","4"};
list1.add(s1);
list1.add(s2);
List<String[]> list2=new ArrayList<String[]>();
String[] s3={"1","2"};
String[] s4={"3","4"};
list2.add(s3);
list2.add(s4);
互联网上的一些解决方案建议使用Collections.sort
Collections.sort(list1);
Collections.sort(list2);
if(list1.equals(list2)){
System.out.println("true");
}
else{
System.out.println("false");
}
但打印出“假”
其他建议使用containsAll
if(list1.containsAll(list2)){
System.out.println("true");
}
else{
System.out.println("false");
}
但它也打印出“假”
看起来上述2个解决方案仅适用于List但不适用于List<String[]>
或更复杂的List<List<String[]>>
那么有没有多种方法来检查是否有任何2个列表相等。
答案 0 :(得分:5)
boolean isEqual=Arrays.deepEquals(list1.toArray(), list2.toArray());
true
也会返回List<String[][]>
,例如
List<String[][]> list1 = new ArrayList<String[][]>();
String[][] s1 = {{"1", "2"}, {"1", "2"}};
String[][] s2 = {{"3", "4"}, {"3", "4"}};
list1.add(s1);
list1.add(s2);
List<String[][]> list2 = new ArrayList<String[][]>();
String[][] s3 = {{"1", "2"}, {"1", "2"}};
String[][] s4 = {{"3", "4"}, {"3", "4"}};
list2.add(s3);
list2.add(s4);
boolean isEqual = Arrays.deepEquals(list1.toArray(), list2.toArray());
System.out.println(isEqual);//will print true.
根据docs,
- 如果两个指定的数组彼此非常相等,则返回true。与equals(Object [],Object [])方法不同,此方法是 适用于任意深度的嵌套数组。