하고재비

[JAVA]Comparable , Comparator 본문

JAVA

[JAVA]Comparable , Comparator

DeadDE 2017. 12. 13. 18:45

Java에서 정렬을 하기위해 두가지 object를 비교하기위해서는 

1. comparable 인터페이스 에서 정의한 compareTo() 메소드를 구현

2. comparator 구현


1. Comparable 구현

1-1. Student.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class Student implements Comparable{
    private int id;
    private String name;
    private int age;
    private String phone;
    private String email;
    
    public Student(int id,String name,int age,String phone,String email){
        this.setId(id);
        this.setName(name);
        this.setAge(age);
        this.setPhone(phone);
        this.setEmail(email);
    }
    @Override
    public int compareTo(Object o) {
        // TODO Auto-generated method stub
        int age1 = ((Student)o).getAge();
        int age_diff = this.getAge() - age1;
        return age_diff;
    }
 
    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + ", age=" + age + ", phone=" + phone + ", email=" + email + "]";
    }
 
        /*getter setter*/
 
    .....
 
}
cs


1-2. main

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package AL;
 
import java.util.ArrayList;
import java.util.Collections;
 
public class Student_Main {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ArrayList<Student> students = new ArrayList<>();
        students.add(new Student(1"DeadDE"27"1111","111@naver.com"));
        students.add(new Student(2"avo"21"1111","111@naver.com"));
        students.add(new Student(3"Ronaldo"35"7777","ronaldo@naver.com"));
        students.add(new Student(4"Messi"30"1010","messi_@naver.com"));
        
        Collections.sort(students);
        for(Student student:students){
            System.out.println(student);
        }
    }
 
}
cs
        Collections.sort(students); 구문이 compareTo 메소드가 선언되지 않으면 오류^^



결과>>


Student [id=2, name=avo, age=21, phone=1111, email=111@naver.com]

Student [id=1, name=DeadDE, age=27, phone=1111, email=111@naver.com]

Student [id=4, name=Messi, age=30, phone=1010, email=messi_@naver.com]

Student [id=3, name=Ronaldo, age=35, phone=7777, email=ronaldo@naver.com]



2. comparator 구현

2-1. Student.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Student{
    private int id;
    private String name;
    private int age;
    private String phone;
    private String email;
    
    public Student(int id,String name,int age,String phone,String email){
        this.setId(id);
        this.setName(name);
        this.setAge(age);
        this.setPhone(phone);
        this.setEmail(email);
    }
    
    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + ", age=" + age + ", phone=" + phone + ", email=" + email + "]";
    }
        /*getter setter*/
}
cs

2-2. Student_name_Comparator.java
1
2
3
4
5
6
7
8
9
10
11
import java.util.Comparator;
public class Student_name_Comparator implements Comparator<Student>{
    @Override
    public int compare(Student o1, Student o2) {
        // TODO Auto-generated method stub
        String name1 = o1.getName();
        String name2 = o2.getName();
        int diff = name1.compareTo(name2);
        return diff;
    }
}
cs


2-3. main
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.ArrayList;
import java.util.Collections;
 
public class Student_Main {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ArrayList<Student> students = new ArrayList<>();
        students.add(new Student(1"DeadDE"27"1111","111@naver.com"));
        students.add(new Student(2"avo"21"1111","111@naver.com"));
        students.add(new Student(3"Ronaldo"35"7777","ronaldo@naver.com"));
        students.add(new Student(4"Messi"30"1010","messi_@naver.com"));
        
        Collections.sort(students, new Student_name_Comparator());
        for(Student student : students){
            System.out.println(student);
        }
    }
 
}
 
cs

Collections.sort(students, new Student_name_Comparator());


결과 >>


Student [id=1, name=DeadDE, age=27, phone=1111, email=111@naver.com]

Student [id=4, name=Messi, age=30, phone=1010, email=messi_@naver.com]

Student [id=3, name=Ronaldo, age=35, phone=7777, email=ronaldo@naver.com]

Student [id=2, name=avo, age=21, phone=1111, email=111@naver.com]



'JAVA' 카테고리의 다른 글

[자료구조] 연결리스트  (0) 2017.12.18
[JAVA]ArrayList  (0) 2017.12.13
[JAVA]추상클래스와 인터페이스  (0) 2017.12.13
[JAVA] 생성자  (0) 2017.12.08
[JAVA] 메소드 오버라이딩 과 오버로딩  (0) 2017.12.07
Comments