A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© Priscilla 中级黑马   /  2017-3-13 17:53  /  864 人查看  /  1 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

      对于一个含有若干个字符串的ArrayList集合,如果要删除其中所有的某个特定字符串(eg."abc"),应该如何实现呢?
     很多同学不由自主会想到采用for循环遍历集合的方式,于是会有以下代码:

public class Test
{
        public static void main(String[] args)
        {
                ArrayList<String> aList = new ArrayList<String>();
               
                aList.add("abc");
                aList.add("abc");
                aList.add("abc");
                aList.add("abc");
                aList.add("abc");
                aList.add("abc");
                aList.add("abc");
                aList.add("hjkhjk");
                aList.add("abc");
                aList.add("bcdabc");
                aList.add("abcde");
                aList.add("abcfds");
                aList.add("abc");
                aList.add("abcghi");
               
                System.out.println("修改之前的aList为: ");
                System.out.println(aList);
               
                for(int i = 0;i < aList.size();i++)
                {
                        if("abc".equals(aList.get(i)))
                        {
                                aList.remove(i);
                        }       
                }       
               
                System.out.println("删除所有‘abc’元素后的aList为: ");
               
                System.out.println(aList);
        }
}

      殊不知,这种方式有欠考虑。也就是说,在某种情况下,ArrayList集合中的"abc"元素会出现删除不彻底的情形。为什么呢?这是因为随着for循环的不断执行,ArrayList集合中元素会减少,有可能出现i值跟ArrayList集合中元素个数相等或比之大的情况,这样,循环就会突然中断,于是,ArrayList集合中的元素也就可能没被删除干净。

      那么,应怎样解决上面的问题呢?可以考虑以下两种方式:

(一)稍微修改上述for循环中代码,在remove()方法后面加上代码i = -1:
       
        for(int i = 0;i < aList.size();i++)
        {
                if("abc".equals(aList.get(i)))
                {
                        aList.remove(i);
                        i = -1;//只要ArrayList集合中元素被删除一个,就将i值重置为-1,当下次循环开始时,i值就变为0
                }       
        }

[b](二)通过ArrayList的迭代器实现:

        Iterator<String> iter = aList.iterator();//获取一个aList的迭代器
               
        /**
        * 遍历aList,逐一检查其中的字符串,直至所有值为"abc"的字符串全部删除为止
         */
        while(iter.hasNext())
        {
                String str = iter.next();
                       
                if("abc".equals(str))
                {
                        iter.remove();
                }
        }
不妥之处,请黑马论坛的大牛批评指正!

1 个回复

正序浏览
怎么没人回复呢?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马