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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马薛有义 黑马帝   /  2011-7-25 15:06  /  3367 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

有一个list,装的全是String,有什么高效的算法知道其中是否有重复元素,不要求找出位置和元素。
List<String> list = new ArrayList<String>();
使用嵌套的for循环可以解决,但是当list很大的时候,效率会很低,还有什么高效的算法吗?

评分

参与人数 1技术分 +2 收起 理由
admin + 2 问得不错!

查看全部评分

4 个回复

倒序浏览
黑马网友  发表于 2011-7-25 15:27:55
沙发
for (String s : list) {
    if (list.lastIndexOf(s) == list.indexOf(s)) {
        list2.add(s);     }   
}

评分

参与人数 1技术分 +1 收起 理由
admin + 1 答题有分!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-25 15:28:27
藤椅
或者用hashset
回复 使用道具 举报
黑马网友  发表于 2011-7-25 16:13:34
板凳
Set set = new HashSet(list);
  list=new ArrayList(set);

评分

参与人数 1技术分 +1 收起 理由
admin + 1 答题有分!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-25 19:54:06
报纸
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次

评分

参与人数 1技术分 +2 收起 理由
admin + 2 我很赞同!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马