首页 > 解决方案 > 如果 a 和 b 具有相同的项目但不一定以相同的顺序返回 true,否则如果传递的数组中的任何一个为 null,则返回 false

问题描述

我在使用此代码时遇到问题,并收到错误消息说预期为假但为真

 * 
 * @param a
 * @param b
 * @return true if a and b have the same items but not necessarily in the same
 *         order, false otherwise return false if either of array passed is null
 */
public boolean same(int[] a, int[] b) {
    if (a == b)
        return true;
    if (a == null || b == null)
        return false;
    int length = a.length;
    if (b.length != length)
        return false;
    for (int i = 0; i < length; i++)
        if (a[i] == b[i]) {
            return true;
        }
    return false;
}// to be completed

标签: javaarrays

解决方案


我想到的第一个解决方案:制作两个数组的副本,对副本进行排序,然后比较它们:

public static boolean same(int[] a, int[] b) {
    if (a == b)
        return true;
    if (a == null || b == null)
        return false;
    int length = a.length;
    if (b.length != length)
        return false;
    int[] aa = Arrays.copyOf(a, length);
    int[] bb = Arrays.copyOf(b, length);
    Arrays.sort(aa);
    Arrays.sort(bb);
    return Arrays.equals(aa, bb);
}

推荐阅读