通过一个例子来说明:
package com.test.lx;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
public class SetList {
public static void main(String[] args) {
Set<Integer> set = new TreeSet<Integer>();
List<Integer> list = new ArrayList<Integer>();
for(int i=-3; i<3; i++)
{
//自动装箱
set.add(i);
list.add(i);
}
for(int i=0; i<3; i++)
{
set.remove(i);
list.remove(i);
}
System.out.println("set : "+set);
System.out.println("list : "+list);
}
}
希望程序从集合和列表中去除非整数值(0,1,2)
并打印【-3,-2,-1】
但是结果是:
为什会出现这样,我直接从JDK源码解释
TreeSet中只有一个remove方法如下图
ArrayList中有2个remove方法如下图:
所以Set的不变,而List将会调用remove(int)方法,而不是remove(Object )
怎么将它变成我们想要的结果?
package com.test.lx;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
public class SetList {
public static void main(String[] args) {
Set<Integer> set = new TreeSet<Integer>();
List<Integer> list = new ArrayList<Integer>();
for(int i=-3; i<3; i++)
{
//自动装箱
set.add(i);
list.add(i);
}
for(int i=0; i<3; i++)
{
set.remove(i);
list.remove((Integer)i);//or Integer.valueOf(i)
}
System.out.println("set : "+set);
System.out.println("list : "+list);
}
}