Collections类
java.util.Collections 是集合工具类,用来对集合进行操作。方法如下:
常用方法
addAll
public static<T> boolean addAll(Collection<T> c, T... elements)
往集合中添加一些元素
Collections.addAll(list, "a", "b", "c", "d", "e");
System.out.println(list); // [a, b, c, d, e]
shuffle
public static void shuffle(List<?> list) 打乱顺序
Collections.shuffle(list);
System.out.println(list); // [c, d, e, b, a]
sort
Comparable
public static <T> void sort(List<T> list)
将集合中元素按照默认规则排序(升序)
注意:
sort的使用前提:被排序的集合里面存储的元素,必须实现Comparable,
重写接口中的方法compareTo定义排序规则
compareTo排序规则:自己-参数(this-o)升序,
参数-自己(o-this)降序
ArrayList<String> list1 = new ArrayList<>();
Collections.addAll(list1, "a", "d", "b", "c", "e");
System.out.println(list1); // [a, d, b, c, e]
Collections.sort(list1);
System.out.println(list1); // [a, b, c, d, e]
自定义类实现sort排序:
public class Person implements Comparable<Person>{
private String name;
private int age;
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public int compareTo(Person o) {
// return 0; // 返回0代表元素都相同
// return this.getAge() - o.getAge(); // 升序
return o.getAge() - this.getAge(); // 降序
}
}
// get set 有参无参构造方法...
测试:
ArrayList<Person> list2 = new ArrayList<>();
list2.add(new Person("大大大", 11));
list2.add(new Person("大大", 9));
list2.add(new Person("大", 19));
System.out.println(list2); // [Person{name='大大大', age=11}, Person{name='大大', age=9}, Person{name='大', age=19}]
Collections.sort(list2);
System.out.println(list2); //[Person{name='大', age=19}, Person{name='大大大', age=11}, Person{name='大大', age=9}]
Comparator
public static <T> void sort(List<T> list, Comparator<? super T>): 按照制定规则排序
Comparator和Comparable的区别:
Comparable:自己(this)和别人(参数)比较,
自己需要实现Comparable接口,重写compareTo方法
Comparator:相当于找一个第三方裁判,比较两个
compareTo排序规则:自己-参数(this-o)升序,
参数-自己(o-this)降序
Comparator规则:o1-o2升序 o2-o1降序
集合比较:
public static void main(String[] args) {
ArrayList<Integer> list01 = new ArrayList<>();
list01.add(1);
list01.add(20);
list01.add(9);
list01.add(2);
System.out.println(list01); // [1, 20, 9, 2]
ollections.sort(list01, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1-o2; // 升序
// return o2-o1; // 降序
}
});
System.out.println(list01); // [1, 2, 9, 20]
}
类对象比较:
ArrayList<Student> list1 = new ArrayList<>();
list1.add(new Student("aaa",15));
list1.add(new Student("aa",8));
list1.add(new Student("a",5));
list1.add(new Student("b",15));
// 如果年龄相同则按照名字首字母比较
Collections.sort(list1, new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
int result = o1.getAge()- o2.getAge();
if (result==0){
result = o1.getName().charAt(0)-o2.getName().charAt(0);
}
return result;
}
});
System.out.println(list1); // [Student{name='a', age=5}, Student{name='aa', age=8}, Student{name='aaa', age=15}, Student{name='b', age=15}]