从Java中删除数组中的重复项

Geo*_*iev 6 java arrays duplicates

我正在尝试编写一个程序,它将生成一个随机的十个整数数组(1到6之间的整数),然后我必须形成另一个数组,删除所有重复项.所以{1,3,5,5,3,4,2,2,2,1}应该返回{1,3,5,4,2}.问题是我得到了答案,但输出数组在重复项所在的地方包含0,我不知道如何减少临时数组的长度(如果可能的话).这是我的计划:

import java.util.*;
public class Lab9Tut12{
public static void main (String[]args){
    int [] numbers = new int[10];
    //int length = 10;
    int[] temp = new int[length];
    for(int i=0;i<10;i++){
        numbers [i] = (int)(Math.random()*6+1);
        System.out.print(numbers [i]);
        System.out.println();
    }
    for(int i=1;i<10;i++){
       if(numbers[i-1]!=numbers[i]){
         temp[i]= numbers[i];
         //length--;
       }
    }
    System.out.println(Arrays.toString(temp));
}
Run Code Online (Sandbox Code Playgroud)

}

War*_*ord 9

一个很好的方法是使用Set.这是一个只包含唯一值的结构.

Set<Integer> set = new HashSet<Integer>();
int[] array = {1,1,2,2,2,3,3,4,5,6,8};

for (int num : array) {
    set.add(num);
}

System.out.println(set);
Run Code Online (Sandbox Code Playgroud)

输出:

[1, 2, 3, 4, 5, 6, 8]
Run Code Online (Sandbox Code Playgroud)

要将集转换为可以使用的数组set.toArray().

  • 危险!“HashSet”中的迭代顺序是_不_保证的。如果迭代顺序很重要,您需要使用“LinkedHashSet”。 (2认同)