如何删除数组中元素值的第一个实例?

时间:2011-04-03 05:07:31

标签: java arrays

  

将一个方法void removeFirst(int newVal)添加到IntegerList类,该类从列表中删除第一次出现的值。如果值没有出现在列表中,它应该什么也不做(但这不是错误)。删除项目不应该更改数组的大小,但请注意,数组值确实需要保持连续,因此当您删除值时,您必须将其后的所有内容移动以填充其空间。还记得减少跟踪元素数量的变量。

请帮助,我已经尝试了本网站上列出的所有其他解决方案,“关于从阵列中删除一个元素”,但没有一个有效。

3 个答案:

答案 0 :(得分:1)

此方法支持与Collection.remove()相同的功能,这是ArrayList删除第一个匹配元素的方式。

public boolean remove(int n) {
    for (int i = 0; i < size; i++) {
        if (array[i] != n) continue;
        size--;
        System.arraycopy(array, i + 1, array, i, size - i);
        return true;
    }
    return false;
}

我建议您不要自己编写此代码,而是查看Trove4J的TIntArrayList,它是int[]的包装器。您还可以读取ArrayList的代码以查看它是如何编写的。

答案 1 :(得分:0)

你可以这样做:

 int count; //No of elements in the array
 for(i=0;i<count;i++) 
 {
     if(Array[i]==element )
     {
          swap(Array,i,count);
            if(count)
            --count;
            break;  
     } 


 }
 int  swap(int Array[],int i,int count)
 {
     int j;
       for(j=i;j<=count-i;j++)
       a[i]=a[i+1];

 }

这不是完整实现。您必须创建一个类并执行此操作。

答案 2 :(得分:0)

使用下面的方法

public static <TypeOfObject> TypeOfObject[] removeFirst(TypeOfObject[] array, TypeOfObject valueToRemove) {
    TypeOfObject[] result = Arrays.copyOf(array, array.length - 1);
    List<TypeOfObject> tempList = new ArrayList<>();
    tempList.addAll(Arrays.asList(array));
    tempList.remove(valueToRemove);
    return tempList.toArray(result);
}

客户端可以通过调用下面的JUnit测试中演示的方法来删除任何数组的第一个元素。

@Test
public void removeFirstTest() {
    // Given
    Integer valToRemove = 5;
    Integer[] input = {1,2,3,valToRemove,4,valToRemove,6,7,8,9};
    Integer[] expected = {1,2,3,4,valToRemove,6,7,8,9};

    // When
    Integer[] actual = removeFirst(input, valToRemove);
    System.out.println(Arrays.toString(actual));

    // Then
    Assert.assertEquals(expected, actual);
}