java中两个数组的比较

java中两个数组的比较,java,arrays,Java,Arrays,为了比较java中的两个字符串,我使用了以下代码 String ary[]={"man","john","su"}; String ary1[]={"john","man","su"}; if(Arrays.equals(ary,ary1)) { System.out.println("equal"); } else { System.out.println("not equal"); } 它打印“不相等”,但这两个数组具有相同的值 实际上,这里两个数组是相同的,但值和位置会

为了比较java中的两个字符串,我使用了以下代码

String ary[]={"man","john","su"};
String ary1[]={"john","man","su"};

if(Arrays.equals(ary,ary1)) {
    System.out.println("equal");
} else {
    System.out.println("not equal");
}
它打印“不相等”,但这两个数组具有相同的值

实际上,这里两个数组是相同的,但值和位置会发生变化


我怎么知道这类数组是相同的。

从我看到的情况来看,你只要试着看看它们是否相等,如果这是真的,就这样做:

boolean areEqual = Arrays.equals(Arrays.sort(arr1), Arrays.sort(arr2));
这是做这件事的标准方法

这样做是因为与邹州一样,如文件所示:

“如果两个数组包含相同的值,则认为两个数组相等 元素数,以及两个元素中所有对应的元素对 数组是相等的。换句话说,如果两个数组包含 “相同顺序中的相同元素”

使用集合:

if (ary.length == ary1.length && new HashSet<>(Arrays.asList(ary)).equals(new HashSet<>(Arrays.asList(ary1)))
stringary[]={“man”、“john”、“su”};
字符串ary1[]={“man”、“john”、“su”};
布尔检查=真;
对于(inti=0;i试试这个,它会起作用的

    String ary[]={"man","john","su"};
    String ary1[]={"john","man","su"};
    boolean isEqual = true;
    if(ary.length != ary1.length) {
        System.out.println("not equal");
    } else {
        int countEquals = 0;
        ArrayList<String> wordList = new ArrayList(Arrays.asList(ary1) );
        for (String str : ary) {
            if (wordList.contains(str)) {
                countEquals++;
                wordList.remove(str);
            } else {
                isEqual = false;
                System.out.println("not equal");
                break;
            }
        }
        if (isEqual) {
            System.out.println("equal");
        }
    }
stringary[]={“man”、“john”、“su”};
字符串ary1[]={“约翰”、“人”、“苏”};
布尔相等=真;
if(ary.length!=ary1.length){
System.out.println(“不相等”);
}否则{
int countEquals=0;
ArrayList wordList=新的ArrayList(Arrays.asList(ary1));
for(字符串str:ari){
if(wordList.contains(str)){
countEquals++;
删除(str);
}否则{
isEqual=假;
System.out.println(“不相等”);
打破
}
}
如果(等质量){
系统输出打印项次(“相等”);
}
}

您应该阅读该文档。它清楚地指出:“换句话说,如果两个数组以相同的顺序包含相同的元素,则这两个数组是相等的”在您的示例中,情况并非如此。您可以先对它们进行排序,然后再使用它。先排序,然后比较…在从中包含的值创建集合后定义您自己的比较器?基本数组中是否有重复的元素?@zouzu感谢我理解。问题是,只有当两个数组的元素都实现时,这才起作用
Comparable
Arrays.sort()返回void。这不会编译。如果
ary
{“man”、“john”、“man”、“su”};
,那么
ary
就不等于
ary1
。你真正想要的是一个包,或者多集:@ZouZou好吧。我为这种情况添加了一些代码。你不能添加长度为的测试。现在假设
字符串ary[]={“man”、“john”、“su”、“man”};字符串ary1[]={“john”、“man”、“su”、“john”}
。仍然输出true。@ZouZou hmmm…它开始变小了countEquals没有用,我忘了删除它。忽略它。
true
String ary[] = { "man", "john", "su" };     
String ary1[] = { "man", "john", "su" };
boolean check = true;       

for(int i=0; i<ary.length; i++)
{
  for(int j=0; j<ary1.length; j++)
  {
    if(i == j)
    {
        if(!ary[i].equals(ary1[j]))
        {
            check = false;
        }
    }   
  }
}
    String ary[]={"man","john","su"};
    String ary1[]={"john","man","su"};
    boolean isEqual = true;
    if(ary.length != ary1.length) {
        System.out.println("not equal");
    } else {
        int countEquals = 0;
        ArrayList<String> wordList = new ArrayList(Arrays.asList(ary1) );
        for (String str : ary) {
            if (wordList.contains(str)) {
                countEquals++;
                wordList.remove(str);
            } else {
                isEqual = false;
                System.out.println("not equal");
                break;
            }
        }
        if (isEqual) {
            System.out.println("equal");
        }
    }