1 接口
1.1 Comparable接口
对于比较大小和数组排序,对象实现该接口还是很有必要的。看第一种用法。
class Student implements Comparable{
int age;
String name;
public Student(int age, String name) {
this.age = age;
this.name = name;
}
@Override
public int compareTo(Object o) {
Student student = (Student) o;
return Integer.compare(age,student.age);
}
}
比较可以这样
Student s1 =new Student(12,"zhangs");
Student s2 =new Student(15,"zhangs");
System.out.println(s1.compareTo(s2));
第二种用法,可以给接口传递个泛型参数,避免了比较的时候强制类型转化。
class User implements Comparable<User>{
private int age;
private String name;
public User(int age, String name) {
this.age = age;
this.name = name;
}
@Override
public int compareTo(User o) {
return Integer.compare(age,o.age);
}
@Override
public String toString() {
return "User{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
测试
User u1 = new User(33,"dd");
User u2 = new User(32,"dd");
System.out.println(u1.compareTo(u2));
User[] arr= {u1,u2};
Arrays.sort(arr);
System.out.println(Arrays.deepToString(arr));
发现已经排序了,正常比较。
1.2 Comparator接口
这个接口 比上面的更具有灵活性,比如根据字符串长度排序数组
String [] arr = {“www”,“e”,“ooooo”,“dd”}
如果还按照上面的,肯定不行,应为String 不能被重新方法的。
这就可以用本接口实现,具体
class CompartorIm implements Comparator<String>{
@Override
public int compare(String o1, String o2) {
return o1.length()-o2.length();
}
}
创建了比较的类,o1长度大就返回正数,小就返回负数。
测试
String [] arr = {"www","e","ooooo","dd"};
Comparator comparator = new CompartorIm();
Arrays.sort(arr,comparator);
System.out.println(Arrays.deepToString(arr));
完成排序。
1.2 Clonable
对象克隆必须实现的接口,没有什么实际意义,不然会报错。
同事,类要重写Object的clone方法,这里很特殊,虽然Object是所有类的父类,他的clone方法是protected的,但子类必须重写才能使用。
代码上
class Student implements Cloneable{
int age;
String name;
Animal animal;
public Student(int age, String name, Animal animal) {
this.age = age;