zoukankan      html  css  js  c++  java
  • java集合去重和排序

    1.去重

    1.1 for循环去重

       for (int i = 0; i<list.size();i++) {
                for (int j=i+1;j<list.size();j++) {
                    if (list.get(i).equals(list.get(j))) {
                        list.remove(j);
                        j--;
                    }
                }
            }

    测试结果:,感觉还是有点用的,感觉循环次数太多了,不推荐使用。

      List<Integer> list = new LinkedList<Integer>();
            List<Integer> list1 = new LinkedList<Integer>();
            Random random = new Random();
            int s=0;
            while (s<50) {
                list.add(random.nextInt(10));
                s++;
            }
            System.out.println("去重前"+list);
            for (Integer temp:list) {
                if (!list1.contains(temp)) { // 判断list1中是否存在这个元素,不存在就保存进去
                    list1.add(temp);
                }
            }
            list=list1;
            System.out.println("去重后" + list);

    第二种,可以用用。

    1.2 set去重

    set集合的提点是无序,不能重复,所以如果把list先存进set集合中,重复元素就没了,之后再取出,重现放进list就可以了,但这个方法有一个缺点,就是原来list元素的顺序会被打乱,如果对顺序有要求的话不推荐使用。

    List<Integer> list = new LinkedList<Integer>();
            Set<Integer> set = new HashSet<Integer>();
            Random random = new Random();
            int s=0;
            while (s<50) {
                list.add(random.nextInt(10));
                s++;
            }
            System.out.println("去重前"+list);
            for (Integer temp:list) {
                set.add(temp);
            }
            list.clear();
            for (Integer temps:set) {
                list.add(temps);
            }
            System.out.println("去重后" + list);

    1.3 map去重

    hashmap的key是不能重复的,value是可以重复的,所以我们可以把list的值当做map的key,这样就可以把重复的值去掉了

        List<Integer> list = new LinkedList<Integer>();
            Map<Integer,String> map = new HashMap<Integer, String>();
            Random random = new Random();
            int s=0;
            while (s<50) {
                list.add(random.nextInt(10));
                s++;
            }
            System.out.println("去重前"+list);
            for (Integer temp:list) {
                map.put(temp,"value");
            }
            list.clear();
            for (int key : map.keySet()){
                list.add(key);
            }
            System.out.println("去重后" + list);

    2.排序

    排序一般是用集合工具类中的sort()方法,这个方法还有一个重载的方法,下面分别来介绍并测试一下。

    2.1 Collections.sort(list)

    直接调用sort方法,就可以了,排序方式是升序

    List<Integer> list = new LinkedList<Integer>();
            Random random = new Random();
            int s=0;
            while (s<10) {
                list.add(random.nextInt(10));
                s++;
            }
            System.out.println("排序前"+list);
            Collections.sort(list);
            System.out.println("排序后" + list);

    2.2 Collections.sort(list,Comparator<>)

    这个重载方法主要用来帮对象排序,自定义排序

    先创建一个实体类 dog类

    public class dog {
        private int id;
        private String name;
        private String sex;
    
        public dog(int id,String name,String sex) {
            this.id=id;
            this.name = name;
            this.sex = sex;
        }
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getSex() {
            return sex;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    }

    之后就是调用sort方法,并且实现Comparator接口,实现里面的compare方法。

     List<dog> list = new LinkedList<dog>();
            int s=10;
            while (s>0) {
                list.add(new dog(s,"南波万","雄"));
                s--;
            }
            for (dog o:list) {
                System.out.println(o.getId());
            }
            Collections.sort(list, new Comparator<dog>() {
                public int compare(dog o1, dog o2) {
                    if (o1.getId() > o2.getId()) {
                        return 1;
                    }else if (o1.getId() < o2.getId()) {
                        return -1;
                    }else {
                        return 0;
                    }
                }
            });
            System.out.println("排序后");
            for (dog o : list) {
                System.out.println(o.getId());

    因为我的排序字段是id,就用了id做比较,大于返回正数,一般都是为1,小于返回负数,一般都是-1,等于返回0

    世间种种的诱惑,不惊不扰我清梦
  • 相关阅读:
    Javascript闭包(转)
    Codeigniter 控制器的继承问题
    ThinkPHP3.1 安全快速入门
    怎么在CI中引入外部的JS与CSS呢?
    Node.js学习笔记(一)
    PHP strstr() 字符串匹配函数
    include和require的区别(转)
    【原】把datagridview中的数据保存到txt文档中
    【转】09年.NET面试题
    【转】Developer Express 系列控件使用心得1
  • 原文地址:https://www.cnblogs.com/javalisong/p/12188383.html
Copyright © 2011-2022 走看看