关于comparable与comparator的用法(即自定义集合框架用法 )

时间:2023-03-09 16:38:41
关于comparable与comparator的用法(即自定义集合框架用法 )
 package javastudy;

 import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
public class Ptext { public static void main(String[] args) {
// TODO Auto-generated method stub
//关于comparable的用法:以Person为例进行排序:
/**用法声明
* 1。建立一个Person类,并定义name,age
* 2.建立Person的构造函数
* 3.建立Person集合框架,并在数组中赋值,遍历打印输出。
* 4.运行,会报错,原因是两个不能比较,所以在此要建立比较方法
* 5.在Person中继承comparable,并重写方法。
* 6.根据api中内容,定义比较值还回-1,1,0.
* 7.运行
* */
TreeSet<Person> ts = new TreeSet<Person>();
ts.add(new Person("Mark",12));
ts.add(new Person("Keven",16));
ts.add(new Person("Bob",20));
ts.add(new Person("Jine",19));
for(Iterator<Person> it=ts.iterator();it.hasNext();)
{
Person p = it.next();
p.show();
System.out.println(it.next());
}
//自己建立一个比较器,即comparator的用法,以Dog为例进行;
/**
* 1.与person类似,建立Dog类,并定义name,weight;
* 2.建立构造方法;
* 3.打印输出或者建立toString方法(原因,如果不建立打印输出方法,在主函数中遍历是会出现javastudy.Person@4aa298b7这种类型)
* 4。在主函数中建立自定义Dog的集合数组,
* 5.建立一个自定义比较器,MyCom并集成Comparator
* 6.定义比较方法
* 7.运行。
* */
TreeSet<Dog> ds = new TreeSet<Dog>(new MyCom());
ds.add(new Dog("Mark",12));
ds.add(new Dog("Keven",16));
ds.add(new Dog("Bob",20));
ds.add(new Dog("Jine",19));
for(Iterator<Dog> it=ds.iterator();it.hasNext();)
{
System.out.println(it.next());
}
} } class Person implements Comparable<Person> {
String name;
int age;
Person(String name,int age)
{
this.name=name;
this.age=age;
}
void show(){
System.out.println(String.format("姓名=%s,年龄=%d", name,age));
} public int compareTo(Person o) {
// TODO Auto-generated method stub
if(this.age < o.age)
{
return 1;
}
else if(this.age>o.age)
{
return -1;
}
else
{
return 0;
}
}
}
//关于comparator的用法,即DOG例子说明; class MyCom implements Comparator<Dog>
{ @Override
public int compare(Dog arg0, Dog arg1) {
// TODO Auto-generated method stub
//这里与return 1 ,-1,0.的用法一样,这是简写。
//注:因为建立的自定义比较Dog1,与dog2,所以这里两种方法都可以使用。而第一种只是利用comparable不行。
return arg0.name.compareTo(arg1.name);
} }
class Dog
{
String name;
int weight;
Dog(String name,int weight)
{
this.name=name;
this.weight=weight;
}
@Override
public String toString() {
return "Dog [name=" + name + ", weight=" + weight + "]";
}
}