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}
你能帮助我吗?
答案 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。然后你的数据结构可以保持不变(这需要很少的内存),你可以根据需要解决这些空字段,甚至在你认为合适时重新填充它们。