대상은 Clonable(), Comparable(), Comparator() 세 가지 인터페이스를 실현합니다!

3633 단어
1. 대상이 Clonable() 인터페이스를 실현한다.
Clonable () 인터페이스는 아무런 내용도 없는 표시 인터페이스입니다.
이 인터페이스의 사용법을 분석합니다: clone 방법은 Object에서 정의된 것이고 보호된 유형입니다. 이 인터페이스를 실현해야만 이 종류의 실례에서 clone 방법을 호출할 수 있습니다. 그렇지 않으면 이상이 발생합니다: CloneNotSupportException. 그리고 Object는 기본적으로 얕은 복사를 실현합니다.
구현 단계:
1. Clonable 인터페이스 구현을 선언합니다.
2. 슈퍼를 호출한다.clone은 대상을 가져옵니다. 부류의 clone 구현에 문제가 없다면, 이 대상의 메모리 저장소에서 모든 부류가 정의한field는 이미 clone이 되었습니다. 이 클래스의 primitive와 변하지 않는 형식의 인용도 복제되었습니다. 변하지 않는 형식의 인용은 모두 얕은copy입니다.
3. 얕은copy의 인용을 원형 대상의 새로운 복제체를 가리킨다.
코드 데모:
// MyArrayList , Clonable 。
public class MyArrayList implements Cloneable{
    public  String name;
    public  int age;

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return (MyArrayList)super.clone();
    }
}
// People , Clonable , clone() 。
class People implements Cloneable {
    MyArrayList my;
    long heigh;

    public MyArrayList getMy() {
        return my;
    }

    public void setMy(MyArrayList my) {
        this.my = my;
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
     People people=new People();
     people.setMy((MyArrayList)people.getMy().clone());
     // People People MyArrayList 
     return people;
    }
}

2. 대상이 Comparable() 인터페이스를 실현한다.
Comparable는javaSDK에 내장된 일반 인터페이스로 클래스가Comparable 인터페이스를 실현하면 이 클래스의 대상 간에 비교할 수 있다고 생각한다.
클래스 1개의 대상이 비교 (정렬) 를 지원하려면 Comparable 인터페이스를 실현해야 합니다.
Comparable 인터페이스 내부에 다시 쓸 것이 하나밖에 없습니다: 관건적인 방법은 -> int compareTo (T o) -> 이 방법은 인트 수치 1개를 되돌려줍니다.
코드 데모:
public class MyArrayList {

    public static void main(String[] args){
        Student[] students={new Student("zs",90),new Student("LL",99),
                new Student("we",88)};
        Arrays.sort(students);
        for(Student s:students){
            System.out.println(s);
        }
    }
}
class Student implements Comparable{

    private String name;
    private double score;
    Student(String name,double score){
        this.name=name;
        this.score=score;
    }
    @Override
    public int compareTo(Student o) {
        return Double.compare(this.score,o.score);
    }

    @Override
    public String toString() {
        return String.format("name:%s    score:%f",name,score);
    }
}

3. 대상은 Comparator() 인터페이스를 실현한다.
코드 데모:
public class Generic implements Comparator{
    private String name;
    private int age;
    public Generic(String name,int age){
        this.name=name;
        this.age=age;
    }
    @Override
    public int compare(T o1, T o2) {
        if(o1.compare(o1,o2)>0){
            return 1;
        }if(o1.compare(o1,o2)<0){
            return -1;
        }else
       return 0;
    }
    
}

4. 두 비교 인터페이스의 차이
1. compareTo(T o)는 하나의 매개 변수만 있고 Comparator 인터페이스에서 반드시 실현해야 하는 compare(T o1, T o2)에는 두 개의 매개 변수가 있다.
2. Comparable와 Comparator는 집합 중의 요소의 비교, 정렬을 실현하는 데 사용되고 Comparable는 집합 내부에서 정의한 방법으로 이루어진 정렬로java에 위치한다.util 아래.Comparator는 집합 외부에서 이루어진 정렬로java에 위치한다.낭하
3. Comparable는 대상 자체가 비교에 필요한 인터페이스를 지원한다. 예를 들어String, Integer 자체가 Comparable 인터페이스를 실현하면 크기 비교 작업을 완성할 수 있다.
4.Comparator는 전용 비교기로서 이 대상이 자체 비교를 지원하지 않거나 자체 비교 함수가 요구를 충족시키지 못할 때 비교기를 써서 두 대상 간의 크기 비교를 완성할 수 있다.Comparator는 대상 자체를 바꾸지 않고 하나의 전략 대상으로 그의 행위를 바꾸는 전략 모델을 구현했다.
5. 한 마디로 하면 Comparable 인터페이스는 비교 코드를 비교해야 하는 클래스의 자체 코드에 끼워 넣고 Comparator 인터페이스는 하나의 독립된 클래스에서 비교를 실현한다.즉, Comparable는 자체적으로 비교를 완성한 것이고, Comparator는 외부 프로그램으로 비교를 실현한 것이다.

좋은 웹페이지 즐겨찾기