黑马程序员技术交流社区

标题: 求List重复元素的算法? [打印本页]

作者: 黑马薛有义    时间: 2011-7-25 15:06
标题: 求List重复元素的算法?
有一个list,装的全是String,有什么高效的算法知道其中是否有重复元素,不要求找出位置和元素。
List<String> list = new ArrayList<String>();
使用嵌套的for循环可以解决,但是当list很大的时候,效率会很低,还有什么高效的算法吗?
作者: 匿名    时间: 2011-7-25 15:27
for (String s : list) {
    if (list.lastIndexOf(s) == list.indexOf(s)) {
        list2.add(s);     }   
}
作者: 匿名    时间: 2011-7-25 15:28
或者用hashset
作者: 匿名    时间: 2011-7-25 16:13
Set set = new HashSet(list);
  list=new ArrayList(set);
作者: 匿名    时间: 2011-7-25 19:54
set集合的特点就是不能存储重复元素,所以用set就可以,然后比较一下set集合于list集合的size就知道有没有重复的了.

另外,我想了一个奇怪点的办法,可以求出重复了哪些元素以及这些元素各自重复了多少次:[code=java]public class Test {
        public static void main(String[] args) {
                List<String> list = new ArrayList<String>();
                list.add("ab");
                list.add("bcd");
                list.add("ded");
                list.add("ede");
                list.add("bcd");
                list.add("ede");
                list.add("bcd");
               
                Map<String,Integer> map = new HashMap<String,Integer>();
                Collections.sort(list);
                for(int i=0;i<list.size()-1;i++){
                        if(list.get(i).equals(list.get(i+1))){
                                String key = list.get(i);
                                if(map.containsKey(key)){
                                        int value = map.get(key);
                                        value++;
                                        map.put(key, value);
                                }else{
                                        map.put(key, 1);
                                }
                        }
                }
                System.out.println(map);
        }
}[/code]结果:{bcd=2, ede=1}
说明bcd重复了2次,ede重复了1次




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