拓展——javaAPI(集合,比较器的组合应用)
Java和c++是两门算法竞赛中非常受欢迎的语言,其中Java就以其强大的类库夺名,无论是工程项目还是打算法竞赛,JavaAPI的应用是不可或缺的,像栈,队列等数据结构,Java类库中都做了较为完善的封装,在竞赛中通常会使用一些数据结构,其中排序的工作也是频繁使用,下面就介绍怎样利用比较器让JavaAPI帮你做到你想实现的排序规则。
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
public class ListDemo {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list = new LinkedList<>();
list.add("b");
list.add("m");
list.add("a");
Collections.sort(list);
System.out.println(list);
List<Student> list1 = new ArrayList<Student>();
list1.add(new Student(10, "Li"));
list1.add(new Student(30, "xai"));
list1.add(new Student(20, "tao"));
Collections.sort(list1, new Comparator<Student>() {
// 构建比较器,自定义比较规则,只当前排序有效,如下按年龄排序
// Comparator名词,比较,还可以在原Student类中实现
// Comparable接口,形容词比较,针对以后所有排序有效
@Override
public int compare(Student o1, Student o2) {
return o1.getAge() - o2.getAge();
}
});
System.out.println(list1);
Collections.sort(list1, (o1, o2) -> {// java8特性Lamada表达式
return o1.name.compareTo(o2.name);
});
System.out.println(list1);
// 迭代器的使用
Iterator<Student> itr = list1.iterator();
while (itr.hasNext()) {
System.out.println(itr.next());
}
}
private static class Student {//自定义类,没有实现Comparable接口
private int age;
private String name;
public Student(int age, String name) {
super();
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
@Override
public String toString() {
return "Student [age=" + age + ", name=" + name + "]";
}
}
}