0

我有一个变量数组,我想删除其中的 1 个元素,然后将整个数组向下移动以填充已删除的位置。任何帮助将不胜感激,在你问之前,不,这不是功课。

4

4 回答 4

2

理想情况下,使用ArrayList已经为您实现的(或其他一些列表实现)。(您要使用的确切实现取决于您需要执行删除的频率与您需要按索引检索或设置的频率等。有了更多上下文,我们可以为您提供更多帮助。)

否则,使用System.arraycopy.

System.arraycopy(array, index + 1, array, index, array.length - index - 1);
// Assuming it's a reference type array: null out the last element so it
// doesn't prevent garbage collection
array[array.length - 1] = null;
于 2012-04-27T05:23:03.367 回答
0

一种可能的解决方案是使用Arrays.asListList#toArray方法将数组临时转换为 a List,使用 的可用remove方法List,然后将其转换回数组。

Object[] arrayToShrink = ...;
List<Object> shrinkedList = new ArrayList<Object>( Arrays.asList( arrayToShrink ) );
shrinkedList.remove( objectToRemove );
Object[] shrinkedArray = shrinkedList.toArray( new Object[shrinkedList.size()] );

短代码明智,但很可能不是最有效的解决方案。

于 2012-04-27T06:02:15.640 回答
0

在数组中执行此操作效率不高,特别是如果您需要提供数组的缩小:

  • 如果您不需要缩小,您可以将所有元素交换到最后。
  • 如果您需要缩小,那么唯一的选择是分配新数组并复制所有元素。

此任务的更好选择是LinkedList. 它提供了删除任意元素的操作,并且不需要任何移动来修复集合。

于 2012-04-27T05:23:52.540 回答
0

我认为最好的解决方案是使用ArrayList

        ArrayList<String> list = new ArrayList<String>();

        //add Elements
        list.add("test1");
        list.add("test2");
        list.add("test3");

        //remove Element 2 (->1)
        list.remove(1);

        //print Element 2
        System.out.println(list.get(1));
        //output: test3

如果你真的想给我们一个数组:

    private void removeElement(String[] array, int index) {
    final int arrayLength = array.length;
    for (int i = index + 1; i < arrayLength; i++) {
        if (i > 0) {
            array[i - 1] = array[i];

            if (i == arrayLength - 1) {
                array[i] = "";
            }
        }
    }
}
于 2012-04-27T05:33:14.377 回答