要确定数组是否包含唯一元素

时间:2017-04-20 08:52:30

标签: java arrays unique hashset

我试图找出数组中的所有元素是否都是唯一的。 PS:我还是个新手。所以,如果有的话,忽略错误的方法。

public static boolean isUnique(int[] arr)
{
    Integer[] integ = new Integer[arr.length];
    for (int i = 0; i < arr.length; i++)
    {
        integ[i] = arr[i];
    }
    Set<Integer> temp = new HashSet<Integer>(Arrays.asList(integ));

    for (int j = 0; j < integ.length; j++)
    {
      temp.add(integ[j]);
    }
    if(temp.size()==arr.length)
    {
        return true;
    }
    else return false;

2 个答案:

答案 0 :(得分:4)

使用Java-8方法会更容易:

public static boolean isUnique(int[] arr) {
    return IntStream.of(arr).distinct().toArray().length == arr.length;
}

答案 1 :(得分:1)

除了一些冗余代码之外,原始isUnique()没有任何问题。

您的问题是SolveMagicSquare的内部循环仅分配给currentRow数组的单个索引。根据您的问题,您使用的是4x4阵列。您调用isUnique(currentRow)的前两次,currentRow仍包含2个或更多0,因为currentRow的最后两个索引尚未初始化。这就是isUnique()返回false的原因。

您可能想要更改

currentRow[i] = input1[i][j];

currentRow[j] = input1[i][j];

或刚过input[i]isUnique()并消除currentRow和内循环。