Conllections的常用方法
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<Person>{ 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<Student>{ /* 当调用Collections的sort方法进行比较器排序时,那么系统内部会自动调用compare方法比较两个对象的大小。 如果该方法返回值是正数,说明第一个参数大于第二个参数。 如果该方法的返回值是0,说明两个对象相等。 如果该方法的返回值是负数,说明第一个参数小于第二个参数。 排序公式: 升序就是一减二 */ @Override public int compare(Student o1, Student o2) { //根据年龄升序排序 return o1.getAge() - o2.getAge(); } }
JDK5的时候,多了一个新的特性叫做可变参数。 如果一个方法的参数是可变参数,那么可以在该参数位置传递任意个数据。 可变参数格式: 修饰符 返回值类型 方法名(参数类型... 参数名) { 方法体; return 返回值; } 1. 在调用可变参数的方法时,可以向可变参数位置传递任意个数据 2. 可变参数的本质就是数组,所以可以将可变参数当成数组去使用 3. 因为可变参数的本质是数组,所以调用可变参数的方法时,也可以向可变参数位置传递数组。 注意: 1. 一个方法中最多只能有一个可变参数。 2. 方法中可变参数必须在最后一个位置。