-1

这是我的任务。我想创建一个从数组中删除重复值的方法,例如 {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}

你能帮助我吗?

4

1 回答 1

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。然后您的数据结构可以保持不变(这需要很少的内存),您可以根据需要处理这些空字段,甚至在您认为合适时重新填充它们。

于 2013-11-01T16:37:09.413 回答