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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

要求是要去除List中的重复元素,视频中老师讲的是先清空原集合,再将临时容器中的元素添加到集合中

但是我突然想起了retainAll();方法

因为临时容器中存入的就是唯一元素,那么去交集不就可以了吗?
但是运行结果不对,运行结果原集合根本没有改变,求教这是怎么回事?求分析
package LinkedList;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ListTest {

        public static void main(String[] args) {
                /*
                 * 去除LinkedList中重复的元素
                 * 思路:
                 * 1,先创建一个临时容器,用于存储唯一性的元素。
                 * 2,遍历原容器,将遍历到的元素到临时容器去判断,是否存在。
                 * 3,如果存在,不存到临时容器中,如果不存在,存储到临时容器中。
                 * 4,遍历结束后,临时容器中存储的就是唯一性的元素。
                 * 5,如果需要将这些唯一性的元素保留到原容器中,只要将原容器清空,并将临时容器中的元素添加到原容器中即可。
                 *
                 */
                List list = new ArrayList();
               
                list.add("HelloKitty1");
                list.add("HelloKitty2");
                list.add("HelloKitty1");
                list.add("HelloKitty2");
                list.add("HelloKitty1");
               
                 getSingleElement(list);
               
                for (Iterator it = list.iterator(); it.hasNext();) {
                        System.out.println(it.next());
                }
               
               
        }
        public static void getSingleElement(List list){
                //创建一个临时容器
                List temp = new ArrayList();
               
                //遍历原容器
                for (Iterator it = list.iterator(); it.hasNext();) {
                        //判断元素是否存在,不存在,就存入临时容器中。
                        Object obj = it.next();
                        if(!temp.contains(obj))
                                temp.add(obj);
                }
                /*
               //遍历结束,清空原容器。
                list.clear();
               
                //将临时容器中的元素添加到原容器中
                list.addAll(temp); */
               
                list.retainAll(temp);//使用该方法替代先清空再添加的做法。
               
               
               
        }

}

2 个回复

倒序浏览
System.out.println(temp.retainAll(list));  答应的是false,说明没成功
回复 使用道具 举报
syusouki 发表于 2015-9-28 22:45
System.out.println(temp.retainAll(list));  答应的是false,说明没成功

为什么会false呢?方法是可用的,也没有报错,应该是运算成功的啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马