System.out.println (obj);
//Implementierte toString-Methode in der Person-Klasse
public class Person {
private String firstName;
private String lastName;
public Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
@Override
//Wählen Sie die Felder aus, die die Klasse charakterisieren, und konvertieren Sie sie in Zeichenfolgen
public String toString() {
return String.format("Sie ist,%s %s.",
this.lastName, this.firstName);
}
//Stellen Sie es einzelnen Gettern zur Verfügung
public String getLastName() {
return this.lastName;
}
public String getFirstName() {
return this.firstName;
}
}
public class ToStringBasic {
public static void main(String[] args) {
var p = new Person("Eilish", "Billie");
System.out.println(p); //Sie ist Billie Eilish.
}
}
//firstName/Implementieren Sie die Methode equals in der Klasse Person des Felds lastName
public class Person {
private String firstName;
private String lastName;
public Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
//Gleichwertig, wenn Vor- und Nachname gleich sind
@Override
public boolean equals(Object obj) {
//Beurteilung der Identität
if (this == obj) {
return true;
}
//Beurteilung der Gleichwertigkeit
//Typprüfung mit instanceof und type cast(Niedergeschlagen)
if (obj instanceof Person) {
var p = (Person)obj;
//Beurteilung der Feldgleichheit(String-Klasse entspricht Methode)
return this.firstName.equals(p.firstName) &&
this.lastName.equals(p.lastName);
}
//False, wenn die Art des Arguments obj unterschiedlich ist
return false;
}
}
//Problematischer Code, der die Symmetrie verletzt
public class BusinessPerson extends Person {
private String department;
//Abteilungsvergleich hinzugefügt
public BusinessPerson(String firstName, String lastName, String department) {
super(firstName, lastName);
this.department = department;
}
@Override
public boolean equals(Object obj) {
//Identität
if (this == obj) {
return true;
}
//Gleichwertigkeit
if (obj instanceof BusinessPerson) {
var bp = (BusinessPerson)obj;
return super.equals(bp) &&
this.department.equals(bp.department);
}
return false;
}
}
public class EqualsBasic {
public static void main(String[] args) {
var p = new Person("Yumi", "Matsutoya");
var bp = new BusinessPerson("Yumi", "Matsutoya", "Komponist");
System.out.println(p.equals(bp)); //true
System.out.println(bp.equals(p)); //false
}
}
//Problematischer Code, der den Übergang verletzt
public class BusinessPerson extends Person {
private String department;
public BusinessPerson(String firstName, String lastName, String department) {
super(firstName, lastName);
this.department = department;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj instanceof Person) {
//Geben Sie für BusinessPerson alle Felder vergleichen ein
if (obj instanceof BusinessPerson) {
var bp = (BusinessPerson)obj;
return super.equals(bp) &&
this.department.equals(bp.department);
//Personentyp ignoriert Abteilungsfeld und vergleicht
} else {
return super.equals(obj);
}
}
return false;
}
}
public class EqualsBasic {
public static void main(String[] args) {
var p = new Person("Yumi", "Matsutoya");
var bp1 = new BusinessPerson("Yumi", "Matsutoya", "Komponist");
var bp2 = new BusinessPerson("Yumi", "Matsutoya", "Sänger");
System.out.println(bp1.equals(p)); //true
System.out.println(p.equals(bp1)); //true
System.out.println(p.equals(bp2)); //true
System.out.println(bp1.equals(bp2)); //falsche Übergangsverletzung!
}
}
public class ObjectHash {
private boolean boolValue;
private int intValue;
private long longValue;
private float floatValue;
private double doubleValue;
private String stringValue;
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
//Die folgende Berechnung unter Verwendung des Hashwerts
//hash = result*31^(n) + v_1*31^(n-1) +..+ v_n
//v_1~v_n ist der int-Wert des Feldes
//n ist die Anzahl der Felder
result = prime * result + (boolValue ? 1231 : 1237);
long temp;
//Der Rückgabewert der doubleToLongBits-Methode ist ein langer Typ
temp = Double.doubleToLongBits(doubleValue);
result = prime * result + (int) (temp ^ (temp >>> 32));
result = prime * result + Float.floatToIntBits(floatValue);
result = prime * result + intValue;
result = prime * result + (int) (longValue ^ (longValue >>> 32));
result = prime * result + ((stringValue == null) ? 0 : stringValue.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
ObjectHash other = (ObjectHash) obj;
if (boolValue != other.boolValue)
return false;
if (Double.doubleToLongBits(doubleValue) != Double.doubleToLongBits(other.doubleValue))
return false;
if (Float.floatToIntBits(floatValue) != Float.floatToIntBits(other.floatValue))
return false;
if (intValue != other.intValue)
return false;
if (longValue != other.longValue)
return false;
if (stringValue == null) {
if (other.stringValue != null)
return false;
} else if (!stringValue.equals(other.stringValue))
return false;
return true;
}
}
Comparable <T>
<T>
ist das zu vergleichende Objekt
Comparable<Person>
lastNameKana
firstNameKana field
//Beispiel für die Implementierung der compareTo-Methode in der Person-Klasse
//<Person>Objekt wird verglichen
//Sortieren nach Nachnamen Wörterbuch
public class Person implements Comparable<Person> {
private String firstNameKana;
private String lastNameKana;
public Person(String firstNameKana, String lastNameKana) {
this.firstNameKana = firstNameKana;
this.lastNameKana = lastNameKana;
}
//Beurteilung der Größe nach Nachname und Name Kana
@Override
//Zunaechst`Feld lastNameKana`Großer und kleiner Vergleich
public int compareTo(Person o) {
//Wenn gleich`Feld firstNameKana`Großer und kleiner Vergleich
if (this.lastNameKana.equals(o.lastNameKana)) {
return this.firstNameKana.compareTo(o.firstNameKana);
} else {
return this.lastNameKana.compareTo(o.lastNameKana);
}
}
@Override
public String toString() {
return this.lastNameKana + " " + this.firstNameKana;
}
}
import java.util.Arrays;
import java.util.Arrays;
public class CompareBasic {
public static void main(String[] args) {
var data = new Person[] {
new Person("Harry", "Potter"),
new Person("Ron", "Weasley"),
new Person("Hermione", "Granger"),
new Person("Albus", "Dumbledore"),
new Person("Severus", "Snape"),
new Person("Serius", "Black"),
};
Arrays.sort(data);
System.out.println(Arrays.toString(data));
//[Black Serius, Dumbledore Albus, Granger Hermione, Potter Harry, Snape Severus, Weasley Ron]
}
}
x.clone ()! = x
Muss unterschiedliche Referenzen seinx.clone (). getClass () == x.getClass ()
Typ matchx.clone (). entspricht (x)
Erfüllen Sie die Äquivalenz=
ist nur eine Kopie der Referenz, kein Duplikat
var x_copy = x;
//Implementieren Sie die klonbare Schnittstelle, um die Replikation explizit zuzulassen
public class Person implements Cloneable {
private String firstName;
private String lastName;
public Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
//Passen Sie den Rückgabewert an den Personentyp anstelle des ursprünglichen Objekts an und sparen Sie sich das Casting auf der Benutzerseite
@Override
public Person clone() {
Person p = null;
try {
//Rufen Sie die Klonmethode der Object-Klasse auf
p = (Person)super.clone();
} catch (CloneNotSupportedException e) {
throw new AssertionError();
}
return p;
}
@Override
public String toString() {
return this.lastName + this.firstName;
}
}
public class Person implements Cloneable {
private String firstName;
private String lastName;
private String[] memos;
public Person(String firstName, String lastName, String[] memos) {
this.firstName = firstName;
this.lastName = lastName;
this.memos = memos;
}
@Override
public Person clone() {
Person p = null;
try {
p = (Person) super.clone();
//Duplizieren Sie ein Array-Objekt explizit, indem Sie die Klonmethode des entsprechenden Felds aufrufen
p.memos = this.memos.clone();
} catch (CloneNotSupportedException e) {
throw new AssertionError();
}
return p;
}
@Override
public String toString() {
return String.format("%s%s(%s)",
this.lastName, this.firstName, this.memos[1]);
}
}
Recommended Posts