java Array.utils,它实际上并没有删除该对象

时间:2014-10-13 16:31:29

标签: java

ArrayUtils.remove(array,i)的问题 它实际上并没有删除任何索引的对象。还有其他解决这个问题的方法吗?

import java.util.Arrays;
import java.util.Scanner;

import org.apache.commons.lang3.ArrayUtils;


public class Testing {


public static void deleteItem(ItemTracker[] listItems) {
    System.out.println("Which item you want to delete? ");
    for(int i=0; i < listItems.length; i++) {
            if(input.equalsIgnoreCase("Quantity")) {
                // Some Code
            } else if(input.equalsIgnoreCase("Something"){
                ArrayUtils.remove(listItems, i); //  This is the part where it should delete .. but it doesnt delete. 
            } 
            break;
        }
      }

    }

3 个答案:

答案 0 :(得分:2)

来自documentation

  

此方法返回一个新数组,该数组具有与指定位置上的元素相同的输入数组元素。返回数组的组件类型始终与输入数组的组件类型相同。

你可能想要:

listItems = ArrayUtils.remove(listItems, i); 

答案 1 :(得分:0)

您需要在ItemTracker对象上实现equals和hashCode方法。这些是集合中对象匹配所必需的。

答案 2 :(得分:0)

您可以改用我的方法:

private static <T>T[] copyArrayWithOneElementDeleted(final T[] array, final int index) {
    final int l = array.length - 1;
    if (index == l) return Arrays.copyOf(array, l);
    final T[] copy = (T[]) Array.newInstance(array.getClass().getComponentType(), l);
    if (index == 0) System.arraycopy(array, 1, copy, 0, l);
    else {
        System.arraycopy(array, 0, copy, 0, index);
        System.arraycopy(array, index + 1, copy, index, l - index);
    }
    return copy;
}

Source

可以像这样使用:

listItems = copyArrayWithOneElementDeleted(listItems, i);