所以基本上,我有一个数组,有十个值......
int[] input = new int[10];
用户控制每个值的输入。
检查数组内部的任何值是否等于任何其他值的好方法是什么?
编辑:
public static void main(String[] args) {
P2 numbers = new P2();
for (int i = 0; i < numbers.input.length; i++) {
numbers.input[i] = numbers.scan.nextInt();
}
numbers.Check();
if (numbers.Check()) { System.out.println("Duplicate"); }
if (numbers.Check() == false) { System.out.println("NOT Duplicate"); }
}
public boolean Check() {
int length = input.length;
for(int i : input) {
for(int j = i + 1; j < length; j++) {
if(input[i] == input[j]) return true;
}
}
return false;
}
代码的工作原理只要重复的数字是索引邻居就可以了。
答案 0 :(得分:8)
如果你在数组中只有10个值,那么你最好使用双嵌套循环,当它找到重复时会中断。
int length = input.length;
for(int i = 0; i < length; i++) {
for(int j = i + 1; j < length; j++) {
if(intput[i] == input[j]) return true;
}
}
如果您希望扩展到一个大数目,那么最好填充一个哈希集,并在找到已经存在于Hashset中的值时中断。
HashSet<Integer> set = new HashSet<Integer>();
for(int i : input) {
if(set.contains(i)) return true;
set.add(i);
}
答案 1 :(得分:1)
你可以
第一个很容易实现,如果你的数组长度只有10,那就足够了。
答案 2 :(得分:1)
如果存储的int
值是小的非负值,那么BitSet
可能是合适的:
BitSet set = new BitSet();
for(int i : input) {
if(set.get(i)) return true;
set.set(i);
}
如果你有大量的值,而且很多,但是重复的可能性很小(即你希望没有重复,只需要确认),你可以对整数进行散列,并使用散列的低13位的BitSet(8192)(例如)。那只用了大约1k。这可用于轻松确认没有重复项,但如果确实发现了哈希冲突,则需要使用效率较低的方法重新检查。
答案 3 :(得分:0)
您还可以对数组进行排序并快速扫描重复项。与构建哈希集相比,它不会使用尽可能多的内存,但会更慢。