Я новичок в Java и пытаюсь изучить метод Collections.sort()
. Я увидел код ниже из Java Tutorial Oracle. После того, как метод Collections.sort()
вызывается в классе NameSort
, массив имен был отсортирован в соответствии с их именем и фамилией. Но я не вижу, что метод hashcode() класса Name
, equals() или compareTo() был вызван в любом месте. Как метод Collections.sort() фактически работает под ним? Может ли кто-нибудь объяснить это мне? Заранее благодарю за любую помощь!Как метод Collections.sort() сортирует массив экземпляра класса «Имя» без вызова метода класса «Имя»?
Имя класса
public class Name implements Comparable<Name> {
private final String firstName, lastName;
public Name(String firstName, String lastName) {
if (firstName == null || lastName == null)
throw new NullPointerException();
this.firstName = firstName;
this.lastName = lastName;
}
public String firstName() { return firstName; }
public String lastName() { return lastName; }
public boolean equals(Object o) {
if (!(o instanceof Name))
return false;
Name n = (Name) o;
return n.firstName.equals(firstName) && n.lastName.equals(lastName);
}
public int hashCode() {
return 31*firstName.hashCode() + lastName.hashCode();
}
public String toString() {
return firstName + " " + lastName;
}
public int compareTo(Name n) {
int lastCmp = lastName.compareTo(n.lastName);
return (lastCmp != 0 ? lastCmp : firstName.compareTo(n.firstName));
}
}
NameSort класс
public class NameSort {
public static void main(String[] args) {
Name[] nameArray = {
new Name("John", "Smith"),
new Name("Karl", "Ng"),
new Name("Jeff", "Smith"),
new Name("Tom", "Rich")
};
List<Name> names = Arrays.asList(nameArray);
Collections.sort(names);
System.out.println(names);
}
}
Большое спасибо за полезный комментарий! Не могли бы вы объяснить это немного подробнее, например, как метод equals() и hashCode() использовался для сортировки заказов? Или как работают методы equal(), hashCode() и compareTo() для выполнения задания? В очередной раз благодарим за помощь! –
Если вы внимательно посмотрите на метод compareTo(), вы заметите, что метод equals() и hashCode() не принимает участия в механизме сортировки вашей программы. Это фактически сравнение объектов на основе функции Java Strings compareTo: int lastCmp = lastName.compareTo (n.lastName); – rahsan
Методы 'equals' и' hashCode' класса 'Name' не используются. Класс 'Name' основан на методе' compareTo' класса 'String'. Взгляните на https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#compareTo-java.lang.String-, чтобы узнать, что происходит, когда метод 'compareTo'' String' называется –