Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바(Java)에서 속성을 기준으로 사용자 정의 객체의 ArrayList 정렬하는 방법

이 글에서는 자바에서 사용자 정의 객체(Custom Object)로 이루어진 ArrayList를 특정 속성(property)을 기준으로 정렬하는 방법을 알아봅니다.

ArrayList 클래스는 AbstractList를 상속하고 List 인터페이스를 구현한 대표적인 컬렉션 클래스입니다. ArrayList는 필요에 따라 크기가 자동으로 늘어나는 동적 배열(dynamic array)을 지원합니다. 배열 리스트는 초기 크기를 지정하여 생성하며, 이 크기를 초과하면 컬렉션이 자동으로 확장되고, 객체가 제거되면 배열이 축소될 수도 있습니다.

그럼 실제 예제를 통해 살펴보겠습니다.

예제 입력 및 출력

입력값:

리스트에 저장된 값:
Java
Scala
Python
Mysql

기대 출력 결과:

정렬 후 리스트:
Java
Mysql
Python
Scala

알고리즘

1단계 - 시작
2단계 - 필요한 변수를 선언한다.
3단계 - 값을 정의한다.
4단계 - 'sort' 메서드를 사용해 리스트를 정렬한다.
5단계 - 'compareTo' 메서드를 사용해 리스트 요소들의 속성을 비교한다.
6단계 - 'add' 메서드를 사용해 리스트에 새로운 값을 추가한다.
7단계 - main 메서드에서 ArrayList를 생성하고 'sort' 메서드를 호출한다.
8단계 - 결과를 화면에 출력한다.
9단계 - 종료

예제 1: 모든 로직을 main 함수에서 처리하는 방식

첫 번째 예제에서는 모든 연산을 하나의 'main' 함수 안에서 함께 처리합니다. 람다 표현식과 compareTo 메서드를 활용해 문자열 속성을 오름차순으로 비교·정렬합니다.

import java.util.*;
class CustomObject {
   private String custom_property;
   public CustomObject(String property){
      this.custom_property = property;
   }
   public String get_custom_property(){
      return this.custom_property;
   }
}
public class Demo {
   public static void print(ArrayList<CustomObject> input_list){
      for (CustomObject object : input_list) {
         System.out.println(object.get_custom_property());
      }
   }
   public static void sort(ArrayList<CustomObject> input_list){
      input_list.sort((object_1, object_2)
      -> object_1.get_custom_property().compareTo(
      object_2.get_custom_property()));
   }
   public static void add(ArrayList<CustomObject> input_list){
      input_list.add(new CustomObject("Java"));
      input_list.add(new CustomObject("Scala"));
      input_list.add(new CustomObject("Python"));
      input_list.add(new CustomObject("Mysql"));
   }
   public static void main(String[] args){
      System.out.println("Required packages have been imported");
      ArrayList<CustomObject> input_list = new ArrayList<>();
      add(input_list);
      System.out.println("The list is defined as ");
      print(input_list);
      sort(input_list);
      System.out.println("
The list after sorting values: ");
      print(input_list);
   }
}

출력 결과

Required packages have been imported
The list is defined as
Java
Scala
Python
Mysql

The list after sorting values:
Java
Mysql
Python
Scala

예제 2: 객체 지향 방식으로 함수를 분리한 방식

두 번째 예제에서는 각 연산을 별도의 함수로 캡슐화하여 객체 지향 프로그래밍(OOP) 스타일로 작성했습니다. 코드의 재사용성과 가독성이 더욱 향상됩니다.

import java.util.*;
class CustomObject {
   private String custom_property;
   public CustomObject(String property){
      this.custom_property = property;
   }
   public String get_custom_property(){
      return this.custom_property;
   }
}
public class Demo {
   public static void main(String[] args){
      System.out.println("Required packages have been imported");
      ArrayList<CustomObject> input_list = new ArrayList<>();
      input_list.add(new CustomObject("Java"));
      input_list.add(new CustomObject("Scala"));
      input_list.add(new CustomObject("Python"));
      input_list.add(new CustomObject("Mysql"));
      System.out.println("The number is defined as ");
      for (CustomObject object : input_list) {
         System.out.println(object.get_custom_property());
      }
      input_list.sort((object_1, object_2)
      -> object_1.get_custom_property().compareTo(
      object_2.get_custom_property()));
      System.out.println("
The list after sorting values: ");
      for (CustomObject object : input_list) {
         System.out.println(object.get_custom_property());
      }
   }
}

출력 결과

Required packages have been imported
The number is defined as
Java
Scala
Python
Mysql

The list after sorting values:
Java
Mysql
Python
Scala

정리

핵심은 List 인터페이스에서 제공하는 sort() 메서드와 람다 표현식입니다. 두 객체의 속성값을 compareTo()로 비교하여 오름차순으로 정렬할 수 있으며, 비교 순서를 반대로 바꾸면 내림차순 정렬도 손쉽게 구현할 수 있습니다. 숫자형 속성이라면 Integer.compare()나 Double.compare()를 활용하면 됩니다.