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 升序
 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号