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

时间:2014-03-12 13:24:12

标签: 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));
}

}

5 个答案:

答案 0 :(得分:7)

这样做的好方法是使用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);

输出:

[1, 2, 3, 4, 5, 6, 8]

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

答案 1 :(得分:3)

请改用Set。将所有数组值放在一个集合中,然后转换回数组。

Set<Integer> numbersSet = new HashSet<>(Arrays.asList(numbers));

Integer[] uniqueNumbers = numbersSet.toArray(new Integer[0]);

Set将消除所有重复项,您无需为此做任何事情。把数字放在那里。

答案 2 :(得分:1)

您可以使用Set存储您的唯一随机数。 Set API

Set<Integer> set = new HashSet<Integer>();
set.add(randomNumber);
...

稍后转换为列表:

 List<Integer> list = new ArrayList<Integer>(set);

答案 3 :(得分:1)

尝试使用这段代码。 Set不允许你放置2个相同的对象。

import java.util.HashSet;
import java.util.Set;

public class MyClass {

    public static void main(String[] args) {

        int size = 10;
        Set<Integer> numbers = new HashSet<Integer>();

        for (int i = 0; i < size; i++) {
            numbers.add((int) (Math.random() * 6 + 1));
        }

        System.out.println(numbers);

    }
}

答案 4 :(得分:1)

使用Set很不错,但是您会遇到问题:.toArray()会返回Integer[],而不是int[](并且您不能拥有一个Set<int>)。

这是一个仍然使用集合的解决方案,但不同:

public static int[] onlyUniqueElements(final int[] inputArray)
{
    final Set<Integer> set = new HashSet<>();
    final int[] tmp = new int[inputArray.length];
    int index = 0;
    for (final int i: inputArray)
        if (set.add(i))
            tmp[index++] = i;

    return Arrays.copyOfRange(tmp, 0, index);
}