티스토리 뷰

자바 정렬 (sort)

기본


  • Arrays.sort 를 이용해서 올림 및 내림차순 정렬을 할 수 있습니다.
int[] intArray = new int[] { 3, 11, 7, 5, 6 }

// 오름 차순 3 5 6 7 11
Arrays.sort(intArray);
// 내림 차순 11 7 6 5 3
Arrays.sort(intArray, Collections.reverseOrder());

객체정렬


  • Comparable에 compare를 이용해 정렬을 할 수 있습니다.
  • 양수(+)를 리턴할 경우 : 1번이 앞에 위치
  • 음수(-)를 리턴할 경우 : 2번이 앞에 위치
  • 0을 리턴할 경우 : 동일한 값이기 때문에 입력 순서를 유지합니다.
public class Item {
    private String name;
    private double price;

    public Item(String name, double price) {
        this.name = name;
        this.price = price;
    }

    public String getName() {
        return name;
    }

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

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }
}

public class Sort {
    public static void main(String[] args) {
        List<Item> items = new ArrayList<>();
        items.add(new Item("사과", 1000));
        items.add(new Item("3분카레", 1500));
        items.add(new Item("양배추", 2500));
        items.add(new Item("참치캔", 2000));
        items.add(new Item("3분짜장", 1300));

        Collections.sort(items, sorter);

        for (Item item: items) {
            System.out.println(item.getName() + " : " + item.getPrice());
        }
    }

    private static Comparator<Item> sorter = new Comparator<Item>() {
        @Override
        public int compare(Item i1, Item i2) {
            return Double.compare(i1.getPrice(), i2.getPrice());
        }
    };
}

결과


사과 : 1000.0
3분카레 : 1500.0
3분짜장 : 1500.0
참치캔 : 2000.0
양배추 : 2500.0

객체 2중 정렬 (price 정렬 후 같은 가격이면 name 정렬)

...
    private static Comparator<Item> sorter = new Comparator<Item>() {
          @Override
        public int compare(Item i1, Item i2) {
            int result = Double.compare(i1.getPrice(), i2.getPrice();
            return result == 0 ? i1.getName.compareTo(i2.getName()) : result;
        }
    };

결과


사과 : 1000.0
3분짜장 : 1500.0
3분카레 : 1500.0
참치캔 : 2000.0
양배추 : 2500.0

댓글