如何为自定义ArrayList实现deleteValues(int values)方法?

时间:2016-03-16 14:50:18

标签: java arrays arraylist

我在数组的帮助下为整数实现我的自定义ArrayList类,我希望能够从我的数组中删除某个值。我的问题是当彼此旁边有许多相同的可删除值时,我得到两个0彼此相邻导致一个错误。我试图解决它几个小时没有运气。这是我的代码:

[4, 2, 3, 4, 4, 4, 4, 1, 2, 3]

在删除值(4)之前,我的数组看起来像这样:

[2, 3, 0, 0, 4, 4, 4, 1, 2, 3]

运行代码后,这是错误的结果:

[2, 3, 1, 2, 3, 0, 0, 0, 0, 0]

我想要实现的目标:StaticGridLayoutManager

我的问题是:使用尽可能少的循环来使代码工作的最佳方法是什么?

4 个答案:

答案 0 :(得分:0)

您的代码中的一个问题是,您始终将索引tempIndex+1处的元素复制到tempIndex:它始终是下一个元素。 事实上,在删除了我们之后说出数组中的5个元素后,您必须将tempIndex+5复制到tempIndex

我认为这是一个很好的方法:

public void deleteValues(int[] a, int value) {
    int j=0;
    for(int i=0; i<a.length; i++) {
        if(a[i]!=value) {
            a[j] = a[i];
            j++;
        }   
    }
    // fill the rest of the array with zeros
    while(j<a.length) {
        a[j] = 0;
        j++;
    }   
}   

基本上,您保留两个索引:ij。 索引i遵循&#34;原始&#34;数组,而索引j跟随&#34; new&#34;数组(删除后)。 索引i遍历所有元素:如果a[i] 等于value,请将其复制到新位置j并递增j {1}}和i。如果a[i] 等于value,请跳过它并递增i而不增加j。 复制或跳过所有元素后,用零填充数组的末尾。

示例输入:

a     = {4, 2, 3, 4, 4, 4, 4, 1, 2, 3}
value = 4

输出:

a     = {2, 3, 1, 2, 3, 0, 0, 0, 0, 0}

答案 1 :(得分:0)

public static void deleteValues(int[] a, int value) {
    int newSize = a.length;
    int current = 0;
    for (int i = 0; i < a.length; i++) {
        if (a[i] != value) {
            if (i != current) {
                a[current] = a[i];
                newSize--;
            }
            current++;
        }
    }
    //use first newSize values, for example you can copy to new array
    System.out.println("New size = " + newSize);
}

答案 2 :(得分:0)

你可以使用迭代器:

List<Integer> numbers = ....
Iterator<Integer> i = numbers.iterator();
while (i.hasNext()) {
   Integer num = i.next(); 
   // add here your custom code
   i.remove();
}

答案 3 :(得分:0)

            int tempIndex,index;
            for (index = 0, tempIndex = 0; index < valuesArray.length; index++) {
                if (valuesArray[index] != valToDelete) {
                    valuesArray[tempIndex++]=valuesArray[index];
                }
            }
            while(tempIndex<valuesArray.length){
                valuesArray[tempIndex++]=0;
            }