是否有任何通用和最简单的方法来检查是否有任何2个String []或String [] [] ...列表等于?

时间:2013-12-04 07:30:07

标签: java list

检查这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个列表相等。

1 个答案:

答案 0 :(得分:5)

使用Arrays.deepEquals

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 [])方法不同,此方法是   适用于任意深度的嵌套数组。
  •