【发布时间】:2015-02-20 12:43:29
【问题描述】:
我有以下接受通用对象的方法(当我使用它时,我传递一个Integer 对象)并删除数组中该位置的对象。请注意,我的
private currentSize;
private E[] list;
...
public E remove(E obj){
for (int i = 1; i < currentSize; i++)
if( ((Comparable<E>)obj).compareTo(list[i]) == 0){
for(int j = i; j < currentSize; j++)
list[j] = list[j+1];
currentSize--;
return obj;
}
return null;
}
我还有另外两种方法与我上面的方法相关。
for(int i=1; i <= 10; i++)
list.addLast(i);
上面的代码将 10 个连续的ints 添加到我的数组中。 (这很好用。注意addLast 方法只解析一个原始的int,因为我在addLast() 中声明了它)
for(int i=1; i <= 10; i++){
list.remove(new Integer(i));
}
上面的代码删除了我们之前添加的那 10 个ints。我的 remove() 方法很有效,它会从数组中删除除 1 之外的所有 Integer 对象。
当我在另一个类中同时调用 addLast 和 remove 方法时的输出:
"1 2 3 4 5 6 7 8 9 10
现在全部删除
列表的当前大小:(应该为零)1"
前面的那个(应该为零)不应该在那里。请注意,我试图忽略数组的 0 索引。另外,我想知道实现我最里面的 for 循环 for(int j = i; j < currentSize; j++) 的向后实现的方式。有点像[1,2,3,4,5] ... 如果我想“删除”数组中的#2,我会从数组的末尾而不是开头开始。
addLast 方法代码:
public void addLast(E obj){
list[currentSize++] = obj;
//System.out.println(currentSize);
}
打印数组中的所有对象:
for(int x : list)
System.out.print(x + " ");
System.out.println("\n");
【问题讨论】:
-
显示您正在调用的所有代码。例如,remove 只查看索引 1 到 currentSize-1,如果 currentsize 是元素的数量,这很糟糕,但如果 currentSize 是元素的数量加一,则可以。请阅读this。你的写作也不清楚,特别是当你提到事物的一部分时。
-
Re“我会从数组的末尾开始”:你的意思是你想要一个运算符 remove_nth_last(n)?
-
Re "list[currentSize++] = obj": 这应该是 if (currentSize+1
标签: java arrays generics for-loop