(1)此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法
(2)实现此接口的对象可以通过Collections.sort和Arrays.sort进行自动排序,也可以用作有序映射中的键或有序集合中的元素,无需指定比较器
(3)接口声明*/
public interface Comparable<T>{
int compareTo(T o); //比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数
}
(4)例如:
public class Person implements Comparable<Person>{ private int num; private int age; public Person(int num , int age) { this.num = num; this.age = age; } @Override public int compareTo(Person o) { return this.num - o.num; } @Override public String toString() { return this.num+"--"+this.age; } } import java.util.Iterator; import java.util.TreeSet; import java.util.Random; public class MyTreeSet { public static void main(String[] args) { TreeSet<Person> treeset = new TreeSet<Person>(); Random rnum = new Random(); Random rage = new Random(); int count = 0 , age , num; while(count < 10){ num = rnum.nextInt(30); age = rage.nextInt(30); Person person = new Person(num , age); if(!treeset.contains( person )){ treeset.add(person); count++; } } Iterator<Person> iterator = treeset.iterator(); while(iterator.hasNext()) System.out.print(iterator.next().toString()+"\t\t"); System.out.println(); } }
(1)可以将Comparator传递给sort方法,从而允许在排序顺序上实现精确控制。还可为那些没有自然顺序的对象 collection 提供排序
(2)接口声明*/
public interface Comparator<T>{
int compare(T o1, T o2); //比较用来排序的两个参数。根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数
}
(3)例如:
import java.util.Comparator; public class Person implements Comparator<Person>{ private int num; private int age; public Person(int num , int age) { this.num = num; this.age = age; } public Person() { super(); } public int getAge() { return age; } public int getNum() { return num; } @Override public String toString() { return this.num+"--"+this.age; } @Override public int compare(Person arg0, Person arg1) { return arg0.getAge() - arg1.getAge(); } } import java.util.Iterator; import java.util.Random; import java.util.TreeSet; public class MyTreeSet{ public static void main(String[] args) { TreeSet<Person> treeset = new TreeSet<Person>(new Person()); Random rnum = new Random(); Random rage = new Random(); int count = 0 , age , num; while(count < 10){ num = rnum.nextInt(30); age = rage.nextInt(30); Person person = new Person(num , age); if(!treeset.contains( person )){ treeset.add(person); count++; } } Iterator<Person> iterator = treeset.iterator(); while(iterator.hasNext()) System.out.print(iterator.next().toString()+"\t\t"); System.out.println(); } }例二
public class Person{ private int num; private int age; public Person(int num , int age) { this.num = num; this.age = age; } public int getAge() { return age; } public int getNum() { return num; } @Override public String toString() { return this.num+"--"+this.age; } } import java.util.Comparator; import java.util.Iterator; import java.util.TreeSet; import java.util.Random; public class MyTreeSet implements Comparator<Person>{ public static void main(String[] args) { TreeSet<Person> treeset = new TreeSet<Person>(new MyTreeSet()); Random rnum = new Random(); Random rage = new Random(); int count = 0 , age , num; while(count < 10){ num = rnum.nextInt(30); age = rage.nextInt(30); Person person = new Person(num , age); if(!treeset.contains( person )){ treeset.add(person); count++; } } Iterator<Person> iterator = treeset.iterator(); while(iterator.hasNext()) System.out.print(iterator.next().toString()+"\t\t"); System.out.println(); } @Override public int compare(Person arg0, Person arg1) { return arg0.getAge() - arg1.getAge(); } }