Collection
常用功能
-
java.utils.Collections
是集合工具类,用来对集合进行操作。部分方法如下: -
public static <T> boolean addAll(Collection<T> c, T... elements)
:往集合中添加一些元素。 -
public static void main(String[] args) { ArrayList<String> list = new ArrayList<>(); // //往集合中添加元素 // list.add("a"); // list.add("o"); // list.add("l"); // list.add("c"); //往集合添加多个元素 Collections.addAll(list,"a","o","l","c"); System.out.println(list);//[a, o, l, c]
//打乱顺序
Collections.shuffle(list);
System.out.println(list);//[o, l, c, a]
//将集合中元素按顺序排序
//前提:被排序的集合里边存储的元素,必须实现comparable
ArrayList<Integer> list01 = new ArrayList<>();
list01.add(1);
list01.add(3);
list01.add(2);
Collections.sort(list01);//默认是升序
System.out.println(list01);//[1, 2, 3]
ArrayList<String> list02 = new ArrayList<>();
list02.add("a");
list02.add("c");
list02.add("b");
Collections.sort(list02);
System.out.println(list02);//[a, b, c]
简述Comparable和Comparator两个接口的区别。
Comparable:强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的compareTo方法被称为它的自然比较方法。只能在类中实现compareTo()一次,不能经常修改类的代码实现自己想要的排序。实现此接口的对象列表(和数组)可以通过Collections.sort(和Arrays.sort)进行自动排序,对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。
Comparator强行对某个对象进行整体排序。可以将Comparator 传递给sort方法(如Collections.sort或 Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用Comparator来控制某些数据结构(如有序set或有序映射)的顺序,或者为那些没有自然顺序的对象collection提供排序。
练习
创建一个学生类,存储到ArrayList集合中完成指定排序操作。
Student 初始类
private String name;
private int age;
public student(String name, int age) {
this.name = name;
this.age = age;
}
public student() {
}
public String getName() {
return name;
}
@Override
public String toString() {
return "student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
测试类
public static void main(String[] args) {
ArrayList<Integer> list01 = new ArrayList<>();
list01.add(1);
list01.add(3);
list01.add(2);
Collections.sort(list01, new Comparator<Integer>() {
//重写比较的规则
@Override
public int compare(Integer o1, Integer o2) {
return 0;
// return o1-o2; 升序
// return o2-o1; 降序
}
});
ArrayList<student> list02 = new ArrayList<>();
list02.add(new student("大雄",18));
list02.add(new student("胖虎",20));
list02.add(new student("l静香",16));
list02.add(new student("x静x",16));
// Collections.sort(list02, new Comparator<student>() {
// @Override
// public int compare(student o1, student o2) {
// //按照年龄升序
// return o1.getAge()-o2.getAge();
//
// }
// });
Collections.sort(list02, 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(list02);//[student{name='l静香', age=16}, student{name='x静x', age=16}, student{name='大雄', age=18}, student{name='胖虎', age=20}]
}