Java_비교 및 정렬
객체 정렬
정렬이 필요한 집합이나 그룹이 단순한 숫자 형식이 아닐 때, 보통 Comparator나 Comparable를 사용하여 간단한 방식으로 대상의 정렬이나 사용자 정의 정렬을 실현할 수 있다.
Comparator와 Comparable의 차이점은 다음과 같습니다.
다음은 구체적인 예를 통해 Comparator와 Comparable의 차이점을 이해한다.
Comparable
package com.tianjf;
import java.util.Arrays;
public class User implements Comparable<Object> {
private String id;
private int age;
public User(String id, int age) {
this.id = id;
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Override
public int compareTo(Object o) {
return this.age - ((User) o).getAge();
}
/**
*
*/
public static void main(String[] args) {
User[] users = new User[] { new User("a", 30), new User("b", 20) };
Arrays.sort(users);
for (int i = 0; i < users.length; i++) {
User user = users[i];
System.out.println(user.getId() + " " + user.getAge());
}
}
}
Comparator
package com.tianjf;
import java.util.Arrays;
import java.util.Comparator;
public class MyComparator implements Comparator<Object> {
@Override
public int compare(Object o1, Object o2) {
return toInt(o1) - toInt(o2);
}
private int toInt(Object o) {
String str = (String) o;
str = str.replaceAll(" ", "1");
str = str.replaceAll(" ", "2");
str = str.replaceAll(" ", "3");
return Integer.parseInt(str);
}
/**
*
*/
public static void main(String[] args) {
String[] array = new String[] { " ", " ", " " };
Arrays.sort(array, new MyComparator());
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
}
equals () 를 복사할 때hashcode () 를 꼭 복사해야 합니까?
답은: 꼭 그렇지는 않다.
일반적인 상황에서hashcode() 방법을 복사할 필요가 없다. 어떤 집합(HashSet,LinkedHashSet,HashMap,LinkedHashMap)을 사용할 때 반드시hashcode() 방법을 복사해야 한다. 이런 집합은 해시 알고리즘을 사용했기 때문에 해시 알고리즘은hashcode()를 사용해야 한다.해시 알고리즘에 관해서는 참고할 수 있다http://blog.csdn.net/tianjf0514/article/details/7709588.
이참에 equals 방법을 복사할 때 주의해야 할 점을 말씀드리겠습니다.
이런 규정들을 소홀히 하지 마라. 만약 그것을 위반한다면, 너의 프로그램은 정상적이지 않고, 심지어는 붕괴될 뿐만 아니라, 실패의 근원을 찾기 어려울 것이다.어떤 종류도 고립되지 않는다. 한 종류의 실례는 보통 다른 종류에 빈번하게 전달된다. 많은 종류가 있는데 모든 집합 종류를 포함하여 그들에게 전달된 대상이 equals 약속을 준수했는지 여부에 의존한다.다음은 equals () 를 복사하는 방법의 예를 들겠습니다.
public boolean equals(Object obj) {
boolean result = false;
if (obj == null) {
result = false;
}
if (this == obj) {
result = true;
}
if (obj instanceof Student) {
Student stu = (Student) obj;
if (stu.getName().equals(this.name) && stu.getAge() == (this.age)) {
result = true;
}
} else {
result = false;
}
return result;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
localStorage에 객체를 추가하는 방법은 무엇입니까?이 노트에서는 localStorage에 객체를 삽입하는 방법을 보여드리겠습니다. 경우에 따라 로컬 스토리지 또는 세션 스토리지에 데이터를 개체로 저장해야 할 수 있습니다. 어떻게 이것을 달성할 수 있습니까? 객체가 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.