Cloneable,Comparable,Comparator接口

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;
	}
	
	
	
}
这样就可以使用年龄以及分数进行排序


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值