1.通过实现匿名内部类的方式实现自定义比较器这里写代码片
package day07Practice;
import java.util.ArrayList;
public class Demo1 {
public static void main(String[] args) {
Manager<Person> mgr = new Manager<Person>(new Compare<Person>() {
public boolean compare(Person o1, Person o2) {
int r = o1.getAge() - o2.getAge();
int num = (r == 0 ? o1.getName().compareTo(o2.getName()) : r);
if (num == 0)
return true;
return false;
}
});
mgr.add(new Person("张胜男", 133));
mgr.add(new Person("李三", 33));
mgr.add(new Person("李四", 23));
mgr.sop();
}
}
class Manager<T> {
private ArrayList<T> list;// 人员列表
private Compare<? super T> compare;
public Manager(Compare<? super T> compare) {
this.compare = compare;
list = new ArrayList<T>();
}
public void add(T t) {
if (list.isEmpty()) {
list.add(t);
return;
}
boolean flag = false;// 是否查找到
for (T old : list) {
if (compare.compare(old, t)) {
flag = true;
break;
}
}
if (!flag)
list.add(t);
}
public void sop() {
for (T t : list) {
System.out.println(t);
}
}
}
// 定义比较器
interface Compare<T> {
public boolean compare(T o1, T o2);
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
2.自定义比较器
package day07Practice;
import java.util.ArrayList;
interface Compare<T> {
public boolean Compare(T o1, T o2);
}
class PersonCompare implements Compare<Person> {
public boolean Compare(Person o1, Person o2) {
int r = o1.getAge() - o2.getAge();
// 如果r==0 则以o1.getName().compareTo(o2.getName())赋值给num
// 否则以年龄排序
int num = (r == 0 ? o1.getName().compareTo(o2.getName()) : r);
if (num == 0)
return true;
return false;
}
}
class StudentCompare implements Compare<Student> {
@Override
public boolean Compare(Student o1, Student o2) {
int r = o1.getAge() - o2.getAge();
int num = (r == 0 ? o1.getName().compareTo(o2.getName()) : r);
if (num == 0)
return true;
return false;
}
}
class Manager<T> {
private ArrayList<T> list;
private Compare<? super T> compare;
public Manager(Compare<? super T> compare) {
this.compare = compare;
list = new ArrayList<T>();
}
public void add(T t) {
if (list.isEmpty()) {
list.add(t);
return;
}
boolean flag = false;// 是否查找到
for (T old : list) {
if (compare.Compare(old, t)) {
flag = true;
break;
}
}
// 如果没有查找到,则添加到集合列表中
if (!flag)
list.add(t);
}
public void sop() {
for (T t : list) {
System.out.println(t);
}
}
}
class Student extends Person {
public Student(String name, int age) {
super(name, age);
}
@Override
public String toString() {
return "Person [name=" + getName() + ", age=" + getAge() + "]";
}
}
class Person {
private String name;
private int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
public class Demo2 {
public static void main(String[] args) {
PersonCompare personCompare = new PersonCompare();
Manager<Person> persons = new Manager<Person>(personCompare);
Person person1 = new Person("张三", 12);
Person person2 = new Person("李四", 23);
Person person3 = new Person("王五", 34);
Student student1 = new Student("student1", 13);
Student student2 = new Student("student2", 14);
Student student3 = new Student("student3", 15);
StudentCompare studentCompare = new StudentCompare();
Manager<Student> students = new Manager(studentCompare);
persons.add(person1);
persons.add(person2);
persons.add(person3);
persons.add(person1);
persons.add(person2);
persons.add(person3);
persons.add(student1);
persons.add(student2);
persons.add(student3);
students.add(student1);
students.add(student2);
students.add(student3);
students.add(student1);
students.add(student2);
students.add(student3);
persons.add(student1);
persons.add(student2);
persons.add(student3);
persons.sop();
System.out.println("---------");
students.sop();
}
}