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

Java如何比较无序字符串数组,java,Java,我必须修改字符串数组 阵列1 Dog Cat Mouse Chicken 阵列2 Cat Dog Mouse Chicken 如何检查数组是否包含相同的元素(顺序无关紧要) 我想我应该先对数组进行排序,然后再进行比较 我在寻找一个布尔答案 编辑使用Java UTIL对我来说是一种选择,我只是对Java不够熟悉 ArrayList<String> arrList1 = new ArrayList<>(Arrays.asList(arr1)); ArrayList<

我必须修改字符串数组

阵列1

Dog
Cat
Mouse
Chicken
阵列2

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

我想我应该先对数组进行排序,然后再进行比较

我在寻找一个布尔答案

编辑使用Java UTIL对我来说是一种选择,我只是对Java不够熟悉

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
}
检查大小是否相等是多余的,因为如果我们有以下列表:

Cat
Cat
Dog

表达式的计算结果为true,但它们的元素并不完全相同

String arr1[]={//your content go here};
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;
字符串arr2[]={//您的内容放在这里}; Arrays.sort(arr1); Arrays.sort(arr2); 如果(arr1.length!=arr2.length){ 复述错误; }否则{ 布尔相似=真; for(int i=0;i
只需对这两个元素进行排序,然后迭代元素以比较它们:

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;
}

这很容易。就这样做吧:

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!");
ArrayList firstArray=new ArrayList();
ArrayList secondArray=新的ArrayList();
firstArray.add(“Dog”);
添加(“Cat”);
添加(“鼠标”);
firstArray.add(“Chicken”);
secondArray.add(“Cat”);
secondArray.add(“Dog”);
secondArray.add(“鼠标”);
第二个数组。添加(“鸡肉”);
布尔值areEqual=firstArray.containsAll(secondArray);
如果(相等)
System.out.println(“瞧!”);
其他的
System.out.println(“Oppps!”);
以下是方法:

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;
    }
我能告诉你怎么做吗 -最好的方法可能是对数组进行排序和比较,比如集合(
Arrays.sort(arrayToSort)
),对象(
Arrays.equals(arr1,arr2)
) -另一种方法是迭代第1个和第2个数组,并尝试一个接一个地查找项目(不好的主意,不是很有效,但很好理解和解释)-类似于以下内容:

    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);
}
String[]arr1={“狗”、“猫”、“老鼠”、“鸡”};
//字符串[]arr2={“狗”、“鼠”、“鸡”}//错误的
字符串[]arr2={“猫”、“狗”、“老鼠”、“鸡”}//真的
布尔值foundAll=true;
如果(arr1.length!=arr2.length){
foundAll=false;
}否则{
for(int i=0;i
对它们进行排序、迭代和比较。两个数组*。如果您想使用
ArrayList
,请查看我的答案。你甚至不需要做任何排序。我认为第二个条件是冗余。你应该首先检查大小,这样你就可以“快速失败”,如果这是
false
@Alist3r,则一个列表可以包含其他元素的所有元素以及更多元素@JordiCastilla则大小检查将失败。如果您首先检查大小,那么您就可以比较ArrList1是否包含Arrlist2的所有元素。
firstArray
可能包含
secondArray
的所有元素以及更多元素,从而使它们不相等。@jonk我假设它们的大小相似,如果不是,那么这个问题就没有意义了!你的逻辑让我得了癌症。问题只是“两个数组是否包含相同的元素”:如果一个数组包含不在另一个数组中的元素,那么答案是否定的。根据你的代码,数组['A'、'B'、'B']和['A'、'A'、'B']相等,这就是wrong@user902383从技术上讲,他们是平等的。这是用法的问题。如果你问我,这些数组必须先规范化,然后检查它们是否相同。如果你熟悉
数学
集合论
,那么我所说的就不难理解了。你可能想重新检查在Java中应该如何比较字符串。谢谢Tom!这是我的错…只是做了更正:)你可以稍微优化一下,即你可以返回false,而不是将值赋给相似的
ismilar
Arrays.equals(Arrays.sort(arr1.clone()), Arrays.sort(arr2.clone()));
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!");
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;
    }
    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);
}