Conllections的常用方法


Collections的常用api

Collections是一个操作集合的工具类。 static void shuffle(List<?> list):对集合中的内容打乱顺序。

static void sort(List list):对集合中的元素进行排序(自然排序)

static void sort(List list, Comparator c):对集合中的内容进行排序,参数c表示比较器(比较器排序)

static boolean addAll(Collection c, T... elements):批量添加元素。 参数c:表示向哪个集合添加元素。 参数elements:表示要添加那些元素。 该参数是可变参数,可以向该参数位置传递任意个数据。

01自然排序

Collections中的sort方法 static void sort(List list):对集合中的元素进行排序(自然排序) 
注意: 使用上面这个sort方法排序的集合,里面的泛型必须要实现Comparable接口。 如果要进行排序,集合中的元素必须要具备比较的功能,如果类实现Comparable接口,
那么表示该类的对象就具备了比较的功能。
当使用sort方法进行排序(自然排序)时,内部会自动调用compareTo方法比较两个元素的大小。 
如果该方法的返回值是正数,表示调用者对象大于参数对象。 如果该方法的返回值是0,表示两个对象相等。
如果该方法的返回值是负数,表示调用者对象小于参数对象。 我们需要做的是在compareTo方法中编写排序的规则。
公式: 升序就是我(调用者)减他(参数) 要根据什么属性进行排序,就让什么相减。

代码示例

 public class Person implements Comparable{
     private String name;
     private int age; 
     @Override
     public int compareTo(Person o) {
         //根据年龄进行升序排序。
         return this.getAge() - o.getAge();
     }
 }

02 比较器排序

 比较器排序方法:
     static void sort(List list, Comparator c):对集合中内容排序(比较器排序)。参数list是要排序的集合。参数c表示比较器。
 如果某个事物本身不具备比较的功能,那么我们就不能使用自然排序的方式对集合直接进行排序了。
 如果事物不具备不叫的功能,那么我们可以找一个法官(比较器)帮这些对象去比较,这样集合也可以进行排序。
 ?
 Comparator是一个接口,该接口表示比较器,如果要用需要使用实现类,这个实现类需要我们自己定义。
 ?
 步骤:
     1. 创建集合并添加元素
     2. 定义一个类,实现Comparator接口。
     3. 重写compare方法,并在该方法中定义比较的规则。
     4. 调用Collections的sort方法,传递集合和比较器进行排序。
 如果事物本身就具备比较的功能,那么我们可以直接使用sort方法进行排序,这种方式叫做自然排序。
 如果事物本身不具备比较的功能,那么我们可以找一个法官帮这些对象进行排序,这种方式叫做比较器排序。

代码示例

 Collections.sort(list, new Rule());//比较器可用匿名内部类
 /*
     Comparator表示比较器,Rule类实现了Comparator接口,Rule类也就表示比较器了
  */
 public class Rule implements Comparator{
     /*
         当调用Collections的sort方法进行比较器排序时,那么系统内部会自动调用compare方法比较两个对象的大小。
         如果该方法返回值是正数,说明第一个参数大于第二个参数。
         如果该方法的返回值是0,说明两个对象相等。
         如果该方法的返回值是负数,说明第一个参数小于第二个参数。
         排序公式:
             升序就是一减二
      */
     @Override
     public int compare(Student o1, Student o2) {
         //根据年龄升序排序
         return o1.getAge() - o2.getAge();
     }
 }

03 可变参数

 JDK5的时候,多了一个新的特性叫做可变参数。
 如果一个方法的参数是可变参数,那么可以在该参数位置传递任意个数据。
 ?
 可变参数格式:
     修饰符 返回值类型 方法名(参数类型... 参数名) {
         方法体;
         return 返回值;
     }
 ?
     1. 在调用可变参数的方法时,可以向可变参数位置传递任意个数据
     2. 可变参数的本质就是数组,所以可以将可变参数当成数组去使用
     3. 因为可变参数的本质是数组,所以调用可变参数的方法时,也可以向可变参数位置传递数组。
 ?
 注意:
     1. 一个方法中最多只能有一个可变参数。
     2. 方法中可变参数必须在最后一个位置。