您现在的位置是:首页 > 文章详情

Java for循环删除ArrayList重复元素陷阱,Iterator迭代器遍历删除重复元素

日期:2018-03-29点击:356
Java for循环删除ArrayList重复元素陷阱,Iterator迭代器遍历删除重复元素

这是一个一不留神就犯下错误的Java列表ArrayList重复删除元素陷阱,并且问题比较隐蔽。问题描述,假设一个ArrayList存储若干个字符串String元素,这些元素中存在若干重复的、一模一样的元素,编程实现把这些重复元素全部删除。
常见的代码写法是for循环定点删除:
 ArrayList<String> mLists = new ArrayList<>(); mLists.add("zhang"); mLists.add("phil"); mLists.add("csdn"); mLists.add("csdn"); mLists.add("csdn"); for (int i = 0; i < mLists.size(); i++) { String s = mLists.get(i); if(s.equals("csdn")) mLists.remove(i); } for(int i=0;i<mLists.size();i++){ System.out.print(mLists.get(i)+" "); }

运行输出:

zhang phil csdn 
这个例子中有5个字符串,其中“csdn”重复出现3次,代码本意是把这些重复3此的“csdn”字符串完全删除,结果还有参数,可见没有完全删除,原因是在于Java的ArrayList在删除元素时候,整个队列在动态变化,整个队列的index和长度均在变化中,所以在for循环中游标不准。正确的删除方法是使用Java迭代器Iterator进行删除。
例如代码:
ArrayList<String> mLists = new ArrayList<>(); mLists.add("zhang"); mLists.add("phil"); mLists.add("csdn"); mLists.add("csdn"); mLists.add("csdn"); Iterator<String> iterator = mLists.iterator(); while (iterator.hasNext()) { String s = iterator.next(); if (s.equals("csdn")) { iterator.remove(); } } for (int i = 0; i < mLists.size(); i++) { String s = mLists.get(i); System.out.print(s + " "); }

输出结果正确:
zhang phil 


原文链接:https://yq.aliyun.com/articles/615709
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章