从数组中删除多次的值

时间:2013-11-01 15:57:21

标签: java arrays

这是我的任务。我想创建一个从数组中删除重复值的方法,例如{1,0,0,2,3,4},所以之后应该是{1,2,3,4}等等。这就是我的意思创造了:

public void delete() {
        for (int i = 0 ; i < tab.length; i++) {
            for (int j = i + 1 ; j < tab.length; j++) {
                if (tab[i] == tab[j]) {
                    for (int c = j; c < tab.length-1; ++c) {
                        tab[i] = tab[i+1];
                    tab[c] = tab[c+1];
                    //tab[i] = tab[i+1];
                    tab.length--;
                }
                }
            }
        }
    }

它不能以我想要的方式工作。如果我有一个类似的数组:

{0,1,6,8,5,7,1,1,2,8}

在方法之后看起来像:

{0,6,6,8,5,7,1,2}

你能帮助我吗?

1 个答案:

答案 0 :(得分:0)

正如其他海报所提到的那样,你真的不想做你想要做的事情,因为调整数组的大小确实是在与阵列本来要做的事情作斗争。我建议查看一些替代数据结构,例如ArrayList(http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html),它将自行监视大小,这样您就不必担心空间限制。

如果出于某种原因需要调整数组大小,则需要使用Arrays.copyOf方法(http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html)创建一个根据需要调整大小的辅助数组,然后使用以下值填充它第一个数组:

int[] array1 = { Some Values};
int[] array2 = Arrays.copyOf(array1, 2 * array1*length);
array2 = array1;

<强>但....

所有案例中,这是一种非常昂贵且毫无意义的做法。而不是尝试删除未使用的数组字段,而是将它们设置为null。然后你的数据结构可以保持不变(这需要很少的内存),你可以根据需要解决这些空字段,甚至在你认为合适时重新填充它们。