Java 62(Student 프로그램)

Kang.__.Mingu·2024년 5월 15일
0

Java

목록 보기
64/108

Collections 클래스

  • 콜렉션 클래스로 생성된 객체를 처리하는 기능을 제공하는 클래스

  • Collections.sort(List< T > list)

    • 매개변수로 전달받은 List 객체의 요소값을 정렬하는 기능을 제공하는 정적메소드
    • List 객체에 저장된 요소값(객체)의 필드값을 비교하는 compaerTo() 메소드를 자동 호출하여 정렬 처리

Comparable 인터페이스

  • 객체 필드값을 비교한 결과값을 반환하는 추상메소드가 작성된 인터페이스

  • compareTo() 메소드를 오버라이딩 선언하여 자식클래스의 객체(this) 필드값을 매개변수로 전달받은 객체 필드값과 비교하여 양수, 음수, 0 중 하나를 반환하는 명령 작성

  • 객체의 필드값을 비교하기 위한 클래스가 반드시 상속받아야 되는 인터페이스


필드값을 비교하여 정렬하는 방법

  • Comparable 인터페이스를 상속받기
  • Comparable 인터페이스에서 compareTo() 메소드 오버라이딩을 받아서 입맛에 맞게 정렬
  • 오버라이딩한 후 사용할 곳에서 Collection.sort(List 변수)를 호출하면 오버라이딩한 compareTo() 메소드가 자동 호출되어 정렬된다.

Student

// Comparable 인터페이스 : 객체 필드값을 비교한 결과값을 반환하는 추상메소드가 작성된 인터페이스
// => compareTo() 메소드를 오버라이딩 선언하여 자식클래스의 객체(this) 필드값을 매개변수로
// 전달받은 객체 필드값과 비교하여 양수, 음수, 0 중 하나를 반환하는 명령 작성
// => 객체의 필드값을 비교하기 위한 클래스가 반드시 상속받아야 되는 인터페이스

// 학생정보(학번, 이름)를 저장하기 위한 클래스
// => List 객체에 저장된 학생정보를 비교하여 정렬하기 위해 Comparable 인터페이스를 상속받아 작성
public class Student implements Comparable<Student> {
    private int num;
    private String name;

    public Student() {
        // TODO Auto-generated constructor stub
    }

    public Student(int num, String name) {
        super();
        this.num = num;
        this.name = name;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "{학번 = "+num+", 이름 = "+name+"}";
    }

    @Override
    public int compareTo(Student o) {
        // 학번(정수값)을 빼기(-) 연산 처리하여 결과값(양수, 음수, 0)을 반환 - 학번 정렬 처리
        return this.num-o.num;//오름차순 정렬
        // return o.num-this.num;//내림차순 정렬

        // 이름(문자열)은 String 클래스의 compareTo() 메소드를 호출하여 결과값(양수, 음수, 0)을
        // 제공받아 반환 - 이름 정렬 처리
        // return this.name.compareTo(o.name);//오름차순 이름
        // return o.name.compareTo(this.name);//내림차순 이름
    }
}

StudentApp

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class StudentApp {
    public static void main(String[] args) {
        List<Student> studentListOne=new ArrayList<Student>();

        studentListOne.add(new Student(3000, "전우치"));
        studentListOne.add(new Student(2000, "임꺽정"));
        studentListOne.add(new Student(1000, "홍길동"));
        studentListOne.add(new Student(5000, "장길산"));
        studentListOne.add(new Student(4000, "일지매"));

        System.out.println("정렬 전 >> ");
        System.out.println(studentListOne);
        System.out.println();
        // Collections 클래스 : 콜렉션 클래스로 생성된 객체를 처리하는 기능을 제공하는 클래스
        // Collections.sort(List<T> list) : 매개변수로 전달받은 List 객체의 요소값을 정렬하는
        // 기능을 제공하는 정적메소드
        // => List 객체에 저장된 요소값(객체)의 필드값을 비교하는 compaerTo() 메소드를 자동
        // 호출하여 정렬 처리
        Collections.sort(studentListOne);

        System.out.println("정렬 후 >> ");
        System.out.println(studentListOne);
        System.out.println("==============================================================");
        List<Student> studentListTwo=new ArrayList<Student>();

        studentListTwo.add(new Student(6000, "유재석"));
        studentListTwo.add(new Student(7000, "강호동"));
        studentListTwo.add(new Student(8000, "신동엽"));
        studentListTwo.add(new Student(9000, "전현무"));

        Map<Integer, List<Student>> studentListMap=new HashMap<Integer, List<Student>>();

        studentListMap.put(1, studentListOne);
        studentListMap.put(2, studentListTwo);

        for(Integer ban : studentListMap.keySet()) {
            System.out.println(ban+"반의 학생정보 >> ");

            List<Student> studentList=studentListMap.get(ban);
            for(Student student : studentList) {
                System.out.println(student); // Student 클래스의 toString() 메소드 자동 호출
            }
            System.out.println();
        }
        System.out.println("==============================================================");
    }
}

결과

profile
최선을 다해 꾸준히 노력하는 개발자 망고입니당 :D

0개의 댓글