确定整数数组是否具有唯一项

时间:2014-06-01 23:07:44

标签: java arrays

我正在研究一种比较随机整数数组中的值的方法。该方法应该检查唯一性。如果没有重复的整数,则该数组将被视为唯一的,否则它不是唯一的。曲线球是我必须返回boolean值。它编译但最终崩溃。有什么建议吗?

public static boolean isUnique(int[] list) {
    boolean unique = true;

    do {
        for (list i = 0; i < array.length; i++) { // cycle through array
            if (list[i] != list[i + 1]) // checks to see if first element is not equal to 2nd
            {
                unique = true;
            }
        }
    } while (unique);
    {
        if (unique == true) {
            System.out.println("This list contains all unique values");
        }
        return true; // if all values are unique return true
    }
    else 
             System.out.println("This list contains duplicates");
    return false; // otherwise the array contains dublicate
}

3 个答案:

答案 0 :(得分:1)

这里有两个问题 -

首先崩溃 - 您正在检查列表中的下一个值;但是,当你在列表的末尾(i = array.length - 1)时,下一个值将不在列表的末尾。

其次,您可能无法预先对这些值进行排序,因此您不知道对相邻值进行检查会发现所有重复值。

答案 1 :(得分:1)

相反,如果所有代码,你可以让JDK为你做繁重的工作:

Set<Integer> set = new HashSet<Integer>();
for (int i : list)
    set.add(i);
return set.size() == list.length;

如果您的list变量实际一个List,您可以在一行中执行此操作:

public static boolean isUnique(List<Integer> list) {
    return new HashSet<Integer>(list).size() == list.size();
}

如果你想“过度”,你可以将这个最后一个版本都设为通用版本,因此它适用于任何类型,并适用于任何集合:

public static boolean isUnique(Collection<?> list) {
    return new HashSet<Object>(list).size() == list.size();
}

请注意,内部Object的{​​{1}}类型不会使行为的正确性无效 - 该集合并不关心类型是什么,只关注Set和{{ 1}}正确实现了类型。

答案 2 :(得分:0)

你方法中的一切都是错误的,你进入无限循环,有无用的结构

这是检查数组唯一性的可能变体之一:

public static boolean isUnique(final int[] list) {
    for (int i = 0; i < (list.length - 1); i++)
        for (int j = (i + 1); j < list.length; j++)
            if (list[i] == list[j])
                return false;
    return true;
}