黑马程序员技术交流社区

标题: 怎样更有效率的从List中移除指定元素 [打印本页]

作者: adamjy    时间: 2014-4-8 01:23
标题: 怎样更有效率的从List中移除指定元素
  1. List<String> a = new ArrayList<String>();
  2. a.add("foo");
  3. a.add("john");
  4. a.add("adam");
  5. a.add("bar");

  6. for (int i = 0; i < a.size(); i++)
  7. {
  8.     String str = a.get(i);
  9.     if (!str.equals("foo") || !str.equals("bar")) a.remove(str);
  10. }
复制代码

以上代码,删除“john”后,“adam”会跳到List中索引为1的位置。所以,“adam”会被跳过不删除。
如果用以下代码,
  1. List<String> a = new ArrayList<String>();
  2. a.add("foo");
  3. a.add("john");
  4. a.add("adam");
  5. a.add("bar");

  6. for (int i = 0; i < a.size(); i++)
  7. {
  8.     String str = a.get(i);
  9.     boolean removed = false;
  10.     if (!str.equals("foo") || !str.equals("bar"))
  11.     {
  12.         a.remove(str);
  13.         removed = true;
  14.     }
  15.     if (removed) i--;
  16. }
复制代码


这样代码又不是很规范,请问有其他更有效率的方法从List中移除元素吗?
作者: 为你而去    时间: 2014-4-8 09:13
使用迭代器,具体实现代码如下:(另外,楼主的 if(!str.equals("foo") || !str.equals("bar"))应该用&&连接吧)

  1. import java.util.*;

  2. public class test01 {
  3.         public static void main(String[] args){
  4.                 List<String> a = new ArrayList<String>();
  5.                 a.add("foo");
  6.                 a.add("john");
  7.                 a.add("adam");
  8.                 a.add("bar");
  9.                
  10.                 Iterator<String> it=a.iterator();
  11.                 while(it.hasNext())
  12.                 {
  13.                         String str=it.next();
  14.                         if(!str.equals("foo") && !str.equals("bar"))
  15.                                 it.remove();
  16.                 }
  17.                 for(String list:a){
  18.                         System.out.println(list);
  19.                 }
  20.         }
  21. }
复制代码

作者: luoyilan222    时间: 2014-4-8 09:32
List<String> a = new ArrayList<String>();
a.add("foo");
a.add("john");
a.add("adam");
a.add("bar");

for (int i = a.size()-1; i >=0; i--)
{
    String str = a.get(i);
    if (!str.equals("foo") || !str.equals("bar"))
    {
        a.remove(str);
    }
}
作者: ﹊佑雨时杰↘    时间: 2014-4-9 14:04
import java.util.*;

public class test01 {
        public static void main(String[] args){
                List<String> a = new ArrayList<String>();
                a.add("foo");
                a.add("john");
                a.add("adam");
                a.add("bar");
               
                Iterator<String> it=a.iterator();
                while(it.hasNext())
                {
                        String str=it.next();
                        if(!str.equals("foo") && !str.equals("bar"))
                                it.remove();
                }
                for(String list:a){
                        System.out.println(list);
                }
        }
}



这样写才是正解   Iterator免去手动操作元素的下标,避免低级的程序错误




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2