您的位置:首页 > 编程语言 > Java开发

java SE基础(Comparable接口和Comparator接口)

2016-03-24 21:58 645 查看

1。Comparable(可比较接口)

(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();
}
}


2。Comparator(比较器接口)

(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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: