您的位置:首页 > 其它

Cloneable,Comparable,Comparator接口

2017-11-06 17:17 357 查看
Cloneable接口,这是一个空接口,标记接口,表示这个类有拷贝能力,需要在这个类中重写clone方法,之后这个类的对象可以使用clone方法,也涉及到浅拷贝和深拷贝问题。

import java.util.Arrays;

class Person implements Cloneable{
public String name;
public String sex;
public String[] sub;
public Person(String name, String sex) {
super();
this.name = name;
this.sex = sex;
sub = new String[2];
sub[0] = new String();
sub[1] = new String();
sub[0] = "math";
sub[1] = "chinese";
}
@Override
protected Object clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
Person p = (Person)super.clone();
p.sub = p.sub.clone();
return p;

}
@Override
public String toString() {
return "Person [name=" + name + ", sex=" + sex + ", sub=" + Arrays.toString(sub) + "]";
}

}

这里重写的clone为深拷贝,如果去掉clone方法的第二句就成为了浅拷贝;

Comparable接口,可以让类拥有compareTo方法,可以自定义排序;

import java.util.Arrays;

class People implements Comparable{
public String name;
public int age;
public int score;
public People(String name,int age,int score) {
super();
this.name = name;
this.age = age;
this.score = score;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", score=" + score + "]";
}
public int compareTo(Object o) {
// TODO Auto-generated method stub
return name.compareTo(((People)o).name);
}

}       这样在main方法中使用Arrays.sort就会按照自定的人名排序。
       Comparator接口,这个接口可以自定义对象多种的比较方式。
import java.util.Arrays;
import java.util.Comparator;
class ComparePersonAge implements Comparator{

@Override
public int compare(Object o1, Object o2) {
// TODO Auto-generated method stub
People p1 = (People)o1;
People p2 = (People)o2;
return p1.getAge() == p2.getAge() ? 0 : (p1.getAge() > p2.getAge() ? 1 : -1);
}
}

class ComparePersonScore implements Comparator{

@Override
public int compare(Object o1, Object o2) {
// TODO Auto-generated method stub
People p1 = (People)o1;
People p2 = (People)o2;
return p1.getScore() == p2.getScore() ? 0 : (p1.getScore() > p2.getScore() ? 1 : -1);
}
}
class People implements Comparable,Comparator{
public String name;
public int age;
public int score;
public People(String name,int age,int score) {
super();
this.name = name;
this.age = age;
this.score = score;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", score=" + score + "]";
}
public int compareTo(Object o) {
// TODO Auto-generated method stub
return name.compareTo(((People)o).name);
}
public String getName() {
return name;
}

public int getAge() {
return age;
}

public int getScore() {
return score;
}
@Override
public int compare(Object o1, Object o2) {
// TODO Auto-generated method stub
return 0;
}

} 这样就可以使用年龄以及分数进行排序
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: