Cloneable,Comparable,Comparator接口
2017-11-06 17:17
357 查看
Cloneable接口,这是一个空接口,标记接口,表示这个类有拷贝能力,需要在这个类中重写clone方法,之后这个类的对象可以使用clone方法,也涉及到浅拷贝和深拷贝问题。
这里重写的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;
}
} 这样就可以使用年龄以及分数进行排序
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;
}
} 这样就可以使用年龄以及分数进行排序
相关文章推荐
- Cloneable、Comparable、Comparator的应用
- java中Comparable接口和Comparator接口的使用
- Comparable接口和Comparator接口的区别
- Java 深拷贝、浅拷贝及Cloneable接口
- java comparator接口与Comparable接口的区别
- Comparable & Comparator接口的区别
- Arrays.sort、Comparable与Comparator两个接口的作用
- Java中的Comparable接口和Comparator接口
- comparator接口与Comparable接口的区别
- Cloneable接口使用
- Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨
- comparator接口与Comparable接口的区别
- JAVA中Arrays.sort()使用两种方式(Comparable和Comparator接口)对对象或者引用进行排序
- Comparable接口和Comparator接口
- Comparable,Comparator 接口
- Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨
- comparator接口与Comparable接口的区别
- comparator接口与Comparable接口的区别
- comparator接口与Comparable接口的区别
- JAVA中Arrays.sort()使用两种方式(Comparable和Comparator接口)对对象或者引用进行排序