sách gpt4 ăn đã đi

java - ArrayList.remove 在称为 Collection.remove 时会给出不同的结果

In lại Tác giả: IT Lão Cao 更新时间:2023-10-28 20:50:44 29 4
mua khóa gpt4 giày nike

这段代码:

    Collection col = new ArrayList();    
col.add("a");
col.add("b");
col.add("c");
for(String s: col){
if(s.equals("b"))
col.remove(1);
System.out.print(s);

}

打印:chữ cái abc

同时这个:

    ArrayList col = new ArrayList();    
col.add("a");
col.add("b");
col.add("c");
for(String s: col){
if(s.equals("b"))
col.remove(1);
System.out.print(s);

}

打印:b

但是它应该打印相同的结果...有什么问题?

câu trả lời hay nhất

Bộ sưu tập 只有 boolean remove(Object o) 方法,如果找到则删除传递的对象。

MảngDanh sách还有public E remove(int index),可以通过索引删除一个元素。

您的第一个代码段调用 boolean remove(Object o),它不会删除任何内容,因为您的 MảngDanh sách 不包含 1 .您的第二个片段调用 public E remove(int index) 并删除索引为 1 的元素(即它删除 "b")。

不同的行为是由于方法重载决议发生在编译时发生的,并且取决于您为其调用方法的变量的编译时类型。当 cột 的类型为 Bộ sưu tập 时,只有 Bộ sưu tập 接口(interface)的 di dời 方法(以及该接口(interface)继承的方法) ) 被考虑用于重载决议。

如果将 col.remove(1) Thay thế bằng col.remove("b"),则两个片段的行为相同。

正如 Tamoghna Chowdhury 所评论的,由于 int 的自动装箱,boolean remove(Object o) 可以接受原始参数 - số nguyên 在您的情况下 到一个 Số nguyên 实例。对于第二个片段,选择 public E remove(int index) thay vì boolean remove(Object o) 的原因是方法重载解析过程首先尝试找到匹配方法不做自动装箱/拆箱转换,所以它只考虑 public E remove(int index).

关于java - ArrayList.remove 在称为 Collection.remove 时会给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35680624/

29 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress