向IntegerList类添加一个方法void removeFirst(int newVal),该方法从列表中删除第一个值。如果该值没有出现在列表中,它应该什么也不做(但它不是错误)。删除一个项目不应该改变数组的大小,但是请注意数组的值需要保持连续,所以当你删除一个值时,你必须将所有的东西都移回来填满它的空间。还要记住减少跟踪元素数量的变量。如何删除数组中元素值的第一个实例?
请帮忙,我已经尝试了本网站上列出的所有关于“从数组中删除元素”的其他解决方案,但都没有工作。
向IntegerList类添加一个方法void removeFirst(int newVal),该方法从列表中删除第一个值。如果该值没有出现在列表中,它应该什么也不做(但它不是错误)。删除一个项目不应该改变数组的大小,但是请注意数组的值需要保持连续,所以当你删除一个值时,你必须将所有的东西都移回来填满它的空间。还要记住减少跟踪元素数量的变量。如何删除数组中元素值的第一个实例?
请帮忙,我已经尝试了本网站上列出的所有关于“从数组中删除元素”的其他解决方案,但都没有工作。
你可以这样做:
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];
}
这不是完全Implementation.You必须创建一个类,并做到这一点。
+0:这会起作用,但相当昂贵。交换可以称为洗牌。 ;)'if(count)'不能编译或做任何事情。 – 2011-04-03 05:51:08
在这种情况下应该使用'System.arraycopy' – 2011-04-03 08:04:29
此方法支持与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,看看它是怎么写的。
阅读这个问题,它说:“当你删除一个值,你将不得不把它转移一切,以填补它的空间”。你明白这句话的意思吗?这是您解决方案的关键。 – 2011-04-03 05:09:08
如果人们知道你正在编程什么语言,答案可能会更容易......数据结构实际上是一个数组吗?或者是一个链表? – 2011-04-03 05:10:32
它是一个数组,而不是一个链表。这在java中。我假设这意味着其余元素的索引必须从0到array.length保持连续。 – 2011-04-03 05:23:38