import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class JavaTest { public static void main(String[] args) {
List list=new ArrayList();
int i;
for(i=0;i<=5;i++)list.add("a"+i);
System.out.println("list size:"+list.size());
Set set=new HashSet();
set.add("a1");
set.add("a2");
for(int j=0;j<list.size();j++){
String s=(String)list.get(j);
                           System.out.println(j);
if(!set.contains(s))list.remove(s);
}
for(i=0;i<list.size();i++)
System.out.println(list.get(i)); }}
程序作用删除list里不等于set的元素
结果:
0,1,2,3
a1,a2,a4
不知为何会得出这个结果来的 
搞不懂for循环,当删除一个时,list.size()减小,但j++只会大,部分数据就删不了 
大家有什么办法实现这东西

解决方案 »

  1.   


    public class ListSet 
    {
      public List<String> lzTest(List<String> list,Set<String> set)
      {
        list.retainAll(set);
        return list;
      }
    }
    一般情况下,使用Java提供的retainAll()方法来求交集吧...
    这个类应该能用,传入两个集合,最后返回的list就是楼主要求的集合...
      

  2.   

    for (int j = 0; j < list.size(); j++) {
      String s = (String) list.get(j);
      //System.out.println(j);
      if (!set.contains(s)) {
        list.remove(s);
        j--;  // 在这个地方加入这行代码,因为当移除了list中的项,那么list.size()会少1,那么j--和j++抵消 这样保证list全部项都是可以遍历到的
      }
    }