Java에서 Comparable 및 Comparator 객체 비교
4875 단어 JavaComparableComparator
A comparison function, which imposes a total ordering on some collection of objects. Comparators can be passed to a sort method (such as Collections.sort or Arrays.sort) to allow precise control over the sort order. Comparators can also be used to control the order of certain data structures (such as sorted sets or sorted maps), or to provide an ordering for collections of objects that don't have a natural ordering. ------API
문자열 목록을 직접sort로 정렬할 수 있습니다. 그것은 String이라는 대상이 Comparable 인터페이스를 실현했기 때문에 우리의Person이 정렬을 하려면 비교기를 실현해야 합니다.
하나.Comparator
Linkedlist에 저장된 객체 정렬
import java.util.Comparator;
import java.util.LinkedList;
class Person{
private float height;
private String name;
Person(float height)
{
this.height=height;
}
public float getHeight() {
return height;
}
public void setHeight(float height) {
this.height = height;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class PersonHeight implements Comparator<Person>{
@Override
// compare ,return<0 ,return>0 ( )
public int compare(Person e1, Person e2) {
if(e1.getHeight() < e2.getHeight()){
return 1;
} else {
return -1;
}
}
}
public class Question3 {
public static void main(String[] args) {
Person p1=new Person(23.4f);
p1.setName("Stud1");
Person p2=new Person(2.34f);
p2.setName("Stud2");
Person p3=new Person(34.32f);
p3.setName("Stud3");
Person p4=new Person(56.45f);
p4.setName("Stud4");
Person p5=new Person(21.4f);
p5.setName("Stud5");
LinkedList<Person> al=new LinkedList<Person>();
al.add(p1);
al.add(p2);
al.add(p3);
al.add(p4);
al.add(p5);
// sort ,
Collections.sort(al, new PersonHeight());
//
for(Person p:al)
System.out.println(p.getName());
}
}
추가:
//
/**
* o1 o2, ; o1 o2, ; , 0;
*/
@Override
public int compare(Step o1, Step o2) {
Date acceptTime1=UtilTool.strToDate(o1.getAcceptTime(), null);
Date acceptTime2=UtilTool.strToDate(o2.getAcceptTime(), null);
// , before
if(acceptTime1.after(acceptTime2)) return 1;
return -1;
}
2.Comparable
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
class Person implements Comparable{
private float height;
private String name;
Person(float height)
{
this.height=height;
}
public float getHeight() {
return height;
}
public void setHeight(float height) {
this.height = height;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int compareTo(Object o) {
// TODO Auto-generated method stub
if(this.height>((Person)o).height){
return 1;
}else
return -1;
}
}
public class Question3 {
public static void main(String[] args) {
Person p1=new Person(23.4f);
p1.setName("Stud1");
Person p2=new Person(2.34f);
p2.setName("Stud2");
Person p3=new Person(34.32f);
p3.setName("Stud3");
Person p4=new Person(56.45f);
p4.setName("Stud4");
Person p5=new Person(21.4f);
p5.setName("Stud5");
LinkedList<Person> al=new LinkedList<Person>();
al.add(p1);
al.add(p2);
al.add(p3);
al.add(p4);
al.add(p5);
Collections.sort(al);
for(Person p:al)
System.out.println(p.getName());
}
}
셋.비교하다Comparable은 Person 클래스의 내부에 정의됩니다.
Comparator는 Person의 외부에 정의되어 있으며, 이때 우리의 Person 클래스의 구조는 아무런 변화가 필요하지 않습니다.
두 가지 방법은 각각 우열이 있다. Comparable로 간단하다. Comparable 인터페이스를 실현하는 대상은 바로 비교할 수 있는 대상이 된다. 그러나 원본 코드를 수정해야 한다. Comparator의 장점은 원본 코드를 수정할 필요가 없고 다른 비교기를 실현하는 것이다. 어떤 사용자 정의 대상이 비교를 해야 할 때 비교기와 대상을 함께 전달하면 크기를 비교할 수 있다.또한Comparator에서 사용자는 복잡하고 통용될 수 있는 논리를 스스로 실현하여 비교적 간단한 대상과 일치하게 할 수 있다. 그러면 많은 중복 노동을 절약할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.