Java(Collections集合工具类)

Collections集合工具类

1、概念

java.util.Collections是集合工具类,用来对集合进行操作

2、常用方法

 static void shuffle(List<?> list)//打乱集合中元素顺序

 sort(List<T> list) //根据元素的自然顺序 对指定列表按升序进行排序。

 Collections.reverse(list); //反转集合里面的元素顺序

 Collections.synchronizedCollection(list);//让集合线程变安全


注意:
  sort()使用前提:
      被排序的集合里面存储的元素,必须实现Comparable接口,重写接口中compareto方法定义排序规则
  Comparable接口排序规则: 自己(this)-参数 :升序

2.1 例一

//创建对象
        ArrayList<String> list = new ArrayList<>();
        //添加
        Collections.addAll(list, "a", "b", "c", "d", "e");
        System.out.println(list);//[a, b, c, d, e]
        //打乱顺序
        Collections.shuffle(list);
        System.out.println(list);//[b, e, d, a, c] 每次顺序不一样
        //按默认升序排序
        Collections.sort(list);
        System.out.println(list);//[a, b, c, d, e]

2.2 例二

public class Test {
    public static void main(String[] args) {
        ArrayList<Person> list =new ArrayList<>();
        list.add(new Person("张三",18));
        list.add(new Person("王五",20));
        list.add(new Person("李四",19));

        System.out.println(list);

    }
}
//实现Comparable接口
class  Person implements Comparable<Person>{
    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

//重写compareto方法
    @Override
    public int compareTo(Person p) {
//        return 0;//认为元素都是相同的
        //自定义比较的规则,比较两人的年龄(this,参数Persong)
        return  this.getAge()-p.getAge();//年龄升序排序
    }
}

2.3 例三

public static void main(String[] args) {
        ArrayList<Student> list = new ArrayList<>();
        list.add(new Student("王宝强",19));
        list.add(new Student("沈腾",18));
        list.add(new Student("贾玲",17));

        Collections.sort(list, new Comparator<Student>() {
            @Override
            public int compare(Student s1, Student s2) {
                //如果年龄相等 则按姓名排序
                int cmp1= s1.getAge() - s2.getAge();//升序排序
                System.out.println(cmp1);
                int cmp2=(cmp1==0) ? s1.getName().compareTo(s2.getName()) : cmp1;
                return  cmp2;
            }
        });
        System.out.println(list);
    }

2.4 Comparator & Comparable 的区别

Comparable:自己(this)和别人(参数)比较,自己需要实现Comparable接口,重写比较规则compareto()方法
Comparator:相当于找一个第三方的裁判,比较两个元素

Comparator比较规则:o1-o2 升序

posted @ 2021-03-03 21:30  一名初学者  阅读(190)  评论(0)    收藏  举报