如下代码:
                              String qq="123456";
  List<Friend> friends=server.getFriend();
for(int i=0;i<friends.size();i++){
if(!friends.get(i).getQq().equals(qq)){
friends.remove(i);
}
}
                      有何错?

解决方案 »

  1.   

    移除本身没错,但这样会导致 friends.size() 动态减小。那么你的循环 for(int i=0;i<friends.size();i++){ 就不准确了,容易造成错漏。这种情况下,建议换成用迭代器,会更合适些:
    for (Iterator<Friend> iterator = friends.iterator(); iterator.hasNext()) {  
        Friend entry = (Friend) iterator.next();  
        if(!entry.getQq().equals(qq)){
           iterator.remove();
        }
    }直接打上来的代码,可能有小错误,你测试下吧。
      

  2.   

    非要用索引这种也可以,只是remove掉一个以后,索引的位置要保持不变,因为原本的下一个元素变成了索引现在的位置。
    即在friends.remove(i);后面加一句: i--;
      

  3.   

    String qq="123456";
    List<Friend> friends=server.getFriend();
    if( friends !=  null){
      for(int i=friends.size()-1;i>= 0; i--){
         if(!friends.get(i).getQq().equals(qq)){
           friends.remove(i);
         }
       }
    }
      

  4.   

     
    String qq="123456";
    List<Friend> friends=server.getFriend();
    for(int i=0;i<friends.size();i++){
    if(!friends.get(i).getQq().equals(qq)){
    friends.remove(i);
    }
    }
    对于List建议不要使用这种方法去遍历,效率比较低,建议使用Iterator
      

  5.   


    有区别吗?还是要调用其remove方法。。