Collections集合工具类的方法

一、addAll&shuffle

Collections是集合工具类,用来对集合进行操作。部分方法如下:
public static  boolean addAll(Collection c,T...elements):往集合中添加一些元素。
public static void shuffle(list list)打乱顺序:打乱集合顺序
public class demo1 {
    public static void main(String[] args) {
        ArrayList arr = new ArrayList<>();
        Collections.addAll(arr,"abc","Hello","Java");//一次添加多个元素
        System.out.println(arr);

        Collections.shuffle(arr);//打乱顺序
        System.out.println(arr);
    }
}
  • addAll无法同时添加多个对象

二、sort

public static void sort(list list):将集合中元素按照默认规则排序

注意:
    sort(list list)使用前提
    被排序的集合里边存储的元素,必须实现Comparable,重写接口中的compareTo

Comparable接口的排序规则:
    自己(this)-参数:升序,反之则降序
@Override
public int compareTo(Person o) {
   return 0;//认为元素都是相同的
  //自定义比较的规则,比较两人的年龄(this,参数Person)
   return this.getAge() - o.getAge();//年龄升序
}
public class Person implements Comparable{
    private String name;
    private int age;

    /*
        省略部分常规代码
   */

    //重写排序的规则
    @Override
    public int compareTo(Person o) {
//        return 0;//认为元素都是相同的
//        自定义比较的规则,比较两人的年龄(this,参数Person)
        return this.getAge() - o.getAge();//年龄升序
    }
}
public class demo2Sort {
    public static void main(String[] args) {
        ArrayList list = new ArrayList<>();
        Collections.addAll(list,1,2,3,5,6,4,8,7,0,9);
        System.out.println(list);
        Collections.sort(list);
        System.out.println(list);

        ArrayList p = new ArrayList<>();
        p.add(new Person("小丑",20));
        p.add(new Person("小王",22));
        p.add(new Person("小李",21));

        System.out.println(p);
//        Collections.sort(p);//无法直接对对象进行排序
        Collections.sort(p);
        System.out.println(p);//年龄升序进行排序

    }
}

三、Comparator和Comparable的区别

相对于上面的Comparable,Comparator不需要在实体类中实现Comparable,直接使用Collections.sort()工具进行排序,根据自己的需求重写return 后面的代码。

import java.util.*;

public class demo3Sort {

    public static void main(String[] args) {
        ArrayList i = new ArrayList<>();
        Collections.addAll(i,1,3,5,7,5,3,6,8,5,7);

        Collections.sort(i, new Comparator() {//重写排序方法
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1-o2;//前-后就是升序
            }
        });
        System.out.println(i);//对集合内的数字进行升序排序

        ArrayList stu = new ArrayList<>();
        stu.add(new Student("a迪丽热巴",21));
        stu.add(new Student("c古力娜扎",20));
        stu.add(new Student("b马尔扎哈",22));
        stu.add(new Student("d迪丽热巴",22));
        /*
        对集合中的对象按照年龄进行升序排序
         */
        Collections.sort(stu, new Comparator() {
            @Override
            public int compare(Student o1,Student o2) {
                int result1 = o1.getAge() - o2.getAge();//按照年龄
                int result2 = o1.getName().charAt(0) - o2.getName().charAt(0);//按照名字首字母
                return result2;
            }
        });
        System.out.println(stu);//对集合中的对象按照年龄进行升序排序


    }
}

总结:

区别

两种比较器Comparable和Comparator,后者相比前者有如下优点:
1、如果实现类没有实现Comparable接口,又想对两个类进行比较(或者实现类实现了Comparable接口,但是对compareTo方法内的比较算法不满意),那么可以实现Comparator接口,自定义一个比较器,写比较算法
2、实现Comparable接口的方式比实现Comparator接口的耦合性要强一些,如果要修改比较算法,则需要修改Comparable接口的实现类,而实现Comparator的类是在外部进行比较的,不需要对实现类有任何修改。从这个角度说,实现Comparable接口的方式其实有些不太好,尤其在我们将实现类的.class文件打成一个.jar文件提供给开发者使用的时候。实际上实现Comparator 接口的方式后面会写到就是一种典型的策略模式。

你可能感兴趣的:(Collections集合工具类的方法)