Java如何比较无序字符串数组

时间:2015-12-16 11:15:04

标签: java

我必须使用字符串数组

数组1

Dog
Cat
Mouse
Chicken

数组2

Cat
Dog
Mouse
Chicken

如何检查数组是否包含相同的元素(顺序无关紧要)

我想我应该首先对数组进行排序而不是比较

我正在寻找布尔答案

编辑使用Java utils是我的选择,我只是不熟悉JAVA

6 个答案:

答案 0 :(得分:4)

只需对它们进行排序并迭代元素以将它们全部进行比较:

public boolean compareStringArrays(String[] arr1, String[] arr2) {
    if (arr1.length != arr2.length)
        return false;

    String[] arr1Copy = arr1.clone();
    String[] arr2Copy = arr2.clone();

    Arrays.sort(arr1Copy);
    Arrays.sort(arr2Copy);
    for (int i=0; i<arr1Copy.length; i++) {
        if (!arr1Copy[i].equals(arr2Copy[i]))
            return false;
    }
    return true;
}

请注意,我在这里制作了数组的副本:这样就保留了传入的数组的原始顺序。还有一个优化来检查长度是否相同,就好像一个数组中的元素多于另一个数组,它们显然不相等。

修改

你也可以使用Arrays.equals()而不是for循环(我原本没想到但现在看起来很明显),所以你可以通过单行实现这一点:

Arrays.equals(Arrays.sort(arr1.clone()), Arrays.sort(arr2.clone()));

答案 1 :(得分:1)

ArrayList<String> arrList1 = new ArrayList<>(Arrays.asList(arr1));
ArrayList<String> arrList2 = new ArrayList<>(Arrays.asList(arr2));
Collections.sort(arrList1);
Collections.sort(arrList2);
if (Arrays.equals(arrList1.toArray(), arrList2.toArray())) {
//They have exactly the same elements
}

编辑: 老答案:

ArrayList<String> arrList1 = new ArrayList<>(Arrays.asList(arr1));
ArrayList<String> arrList2 = new ArrayList<>(Arrays.asList(arr2));
if (arrList1.containsAll(arrList2) && arrList2.containsAll(arrList1)) {
//They have the same elements, not necessarily the same number
}

最佳答案将告诉您它们是否包含相同的元素,以及它们是否具有相同的数字,底部答案将告诉您它们是否具有相同的元素,但不会告诉您是否有任何元素重复

再次编辑: 首先我发布了:

if (arrList1.containsAll(arrList2) && arrList2.containsAll(arrList1)
         && arrList1.size() == arrList2.size())

检查大小是否相等是多余的,因为如果我们有列表:

Cat
Cat
Dog

Cat
Dog
Dog

表达式将评估为true,但它们没有完全相同的元素

答案 2 :(得分:1)

以下是方法:

public boolean compareArray(){
        boolean isSameArray=false;
        String[] arr1={"Dog","Cat","Mouse","Chicken"};
        String[] arr2={"Cat","Dog","Mouse","Chicken"};
        Arrays.sort(arr1);
        Arrays.sort(arr2);

        if(Arrays.equals(arr1, arr2)){
            isSameArray=true;
        }else{
            isSameArray=false;
        }
        return isSameArray;
    }

答案 3 :(得分:0)

这很容易。就这样做:

ArrayList<String> firstArray=new ArrayList<>();
ArrayList<String> secondArray=new ArrayList<>();

firstArray.add("Dog");
firstArray.add("Cat");
firstArray.add("Mouse");
firstArray.add("Chicken");

secondArray.add("Cat");
secondArray.add("Dog");
secondArray.add("Mouse");
secondArray.add("Chicken");

boolean areEqual=firstArray.containsAll(secondArray);

if(areEqual)
  System.out.println("Voila!");
else
  System.out.println("Oppps!");

答案 4 :(得分:0)

可能如何做到这一点   - 可能最好的方法是进行排序并比较像集合(Arrays.sort(arrayToSort)),对象(Arrays.equals(arr1,arr2))这样的数组   - 另一种方法是迭代第一和第二阵列并尝试逐个查找项目(不好主意,不是那么有效,但很好理解和解释) - 如下所示:

    String[] arr1={"Dog","Cat","Mouse","Chicken"};
    //String[] arr2={"Dog","Mouse","Chicken"};       //FALSE
    String[] arr2={"Cat","Dog","Mouse","Chicken"}; //TRUE

    boolean foundAll = true;

    if(arr1.length != arr2.length){
        foundAll = false;
    }else{
        for (int i = 0; i < arr1.length; i++) {
            boolean foundActual = false;
            for (int j = 0; j < arr2.length; j++) {
                if(arr1[i].equals(arr2[j])){
                    foundActual = true;
                    break;
                }
                System.out.println("arr1 elem: " + arr1[i] + " arr2 elem: "+ arr2[j]);
            }
            System.out.println("\n");
            if(!foundActual){
                foundAll = false;
                break;
            }

        }
    }
    System.out.println("found all: " + foundAll);
}

答案 5 :(得分:-1)

String arr1[] = {//your content goes here};
String arr2[] = {//your content goes here};

Arrays.sort(arr1);
Arrays.sort(arr2);

if(arr1.length != arr2.length){
   retrn false;
}else{
    boolean isSimilar = true;
    for(int i=0; i< arr1.length; i++){
         if(!(arr1[i].equals(arr2[i]))){
            isSimilar = false;
         }
    }
} 
return isSimilar;