/**
* @author wmx
* @date 2019-11-26
*/
public class TestRemove {
public static void main(String[] args) {
Set<Integer> set = new TreeSet<>();
List<Integer> list = new ArrayList<>();
for (int i = -3; i < 3 ; i++) {
set.add(i);
list.add(i);
}
System.out.println("set"+set);
System.out.println("list"+list);
for (int i = 0; i < 3 ; i++) {
set.remove(i);
list.remove(i);
}
System.out.println("set"+set);
System.out.println("list"+list);
}
}
第一处输出:
set[-3, -2, -1, 0, 1, 2]
list[-3, -2, -1, 0, 1, 2]
下面呢?
应该都输出[-3,-2,-1]
因为remove的是元素0,1,2
但是输出的是
set[-3, -2, -1]
list[-2, 0, 2]
为什么会出现这种带有歧义的方法呢?
是由于方法重载导致的
set的remove是移除集合中该元素
boolean remove(Object o);
然而list中有remove的重载方法
boolean remove(Object o);
E remove(int index);
add时由于范型是Integer,int会转为包装类Integer,add没问题
remove由于参数是int,会直接调用这个重载方法E remove(int index);
重载方法的误用,往往使你得不到你想得到的答案
建议一:
尽量不使用重载方法
建议二:
重载方法要有详细的注释和文档
转载请注明:汪明鑫的个人博客 » remove的错误使用
说点什么
您将是第一位评论人!