두 객체를 비교하기 전에 무엇을 기준으로 비교할 것인지 먼저 결정해야 합니다. 객체에는 멤버 변수가 너무 많아서 직접 비교가 불가능합니다.
< ;T> ;은 비교할 객체의 유형으로 채워지는 인터페이스의 매개변수입니다. 이 인터페이스에는 CompareTo 추상 메소드가 하나만 있으며 구조는 다음과 같습니다. 크기 비교
1.2 Comparator
이 인터페이스에는 객체 간의 크기를 비교하는 데에도 사용되는 추상 메서드 비교가 있습니다. 메서드의 구조는 다음과 같습니다.
인터페이스 간의 차이점은 다음과 같습니다. Comparator요소가 클래스인 배열인 경우 Comparator
이 인터페이스는 빈 인터페이스이지만 복제하려면 클래스에서 이 인터페이스를 구현해야 하며, 다시 작성해야 하는 메소드는 Object 클래스의 clone() 메소드입니다.
clone은 IDEA에서 자동으로 다시 작성되는 () 메서드는 다음과 같습니다.
throws 및 다음 문은 지금 초점이 아니므로 지금은 건너뜁니다.이 메서드의 반환 값은 Object 클래스이므로 기억하세요. 2.2 Deep Copy와 Shallow CopyCloning에 대해 이야기하고 있으니 Deep Copy와 Shallow Copy 두 가지의 개념에 대해 간단히 이야기해 보도록 하겠습니다.
가정해 보겠습니다. A의 내용이 B에 복사된 다음 B 콘텐츠의 내용을 수정합니다. A의 내용이 변경되지 않은 경우 깊은 복사본이고, 그렇지 않으면 얕은 복사본입니다
설명해야 합니다. 복제 방법은 깊은 복사본이거나 얕은 복사본은 클래스의 멤버 변수 및 작성하는 코드와 관련이 있습니다. 두 개의 서로 다른 클래스는 동일한 복제 방법을 사용합니다. 하나는 깊은 복사본이고 다른 하나는 얕은 복사본입니다. .이런 상황이 존재합니다
class A implements Cloneable{ int i; int j; @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } @Override public String toString() { return "{" + "i=" + i + ", j=" + j + '}'; } }
메인 메서드에서 이를 인스턴스화하고 다른 개체에 복제합니다. 결과를 살펴보세요.
현재 a는 변경되지 않았습니다. b를 변경하면 clone()은 deep copy클래스 A를 변환합니다:class B implements Cloneable { int k; } class A implements Cloneable{ int i; int j; B c=new B(); @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } @Override public String toString() { return "{" + "i=" + i + ", j=" + j + ", c.k=" + c.k + '}'; } }결과는 다음과 같습니다. 그럼 이때 클론은 deep copy인가요,shallow copy인가요? 이 결과가 나오는 이유는 메모리에 따라 다릅니다. Class A가 수정되기 전의 메모리는 다음과 같습니다. Class A의 수정된 메모리는 다음과 같습니다.
위 그림에 따르면, Deep Copy를 달성하려면 클래스 B 콘텐츠의 또 다른 복제가 필요하므로 복제 방법을 수정해야 합니다
class B implements Cloneable { int k; @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } } class A implements Cloneable{ int i; int j; B c=new B(); @Override protected Object clone() throws CloneNotSupportedException { A tmp=(A)super.clone(); tmp.c=(B)this.c.clone(); return tmp; } @Override public String toString() { return "{" + "i=" + i + ", j=" + j + ", c.k=" + c.k + '}'; } }
직접 그림을 그리려는 이유에 대해서는 여기서 다루지 않겠습니다
3 . Object 클래스Object 클래스 여기에는 일반적으로 사용되는 몇 가지 메서드가 있습니다.3.1 equals
Object 클래스에서 이 메서드는 크기를 비교하는 데 사용됩니다. 기본 구현 논리는 다음과 같습니다. :
public boolean equals(Object obj) { return (this == obj); }
3.2 toString
위 내용은 Java 추상 클래스 및 인터페이스를 정의하고 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!