我有两个来自java.util包的集合。最初添加了几个元素,然后删除了元素。我试图在这里理解两件事。
问题1:两个集合中的删除元素是基于索引还是基于元素?下面的代码是在eclipse中编译和运行的。
int main()
{
{
Foo f;
f.resetBar();
}
return getchar();
}
现在尝试删除两个集合中的元素:
List<Integer> list = new ArrayList<Integer>();
Set<Integer> set = new HashSet<Integer>();
for (int i = -3; i < 3; i++) {
list.add(i);
set.add(i);
}
//List = [-3, -2, -1, 0, 1, 2] Set =[-1, 0, -2, 1, -3, 2]
问题2:查看用于删除元素的java源代码的实现代码。我如何理解以下源代码?
for (int i = 0; i <= 2; i++) {
list.remove(i);
set.remove(i);
}
// Result is List = [-2, 0, 2] Set = [-1, -2, -3]
答案 0 :(得分:0)
在回答您的第一个问题时,set.remove(i)
调用了Set#remove(Object)
,它会按值删除元素。 List
也有[{1}}方法(继承自remove(Object)
),但由于Collection
为i
,int
会解析为更具体的list.remove(i)
3}},它通过索引删除元素。
至于你的第二个问题,代码是删除给定索引处的元素,方法是将所有项目向右移动,然后递减大小。有关详细信息,请参阅javadoc到List#remove(int)
。