Programming/JAVA
[JAVA] 자바 정렬 Sort, Comparable
Beat.
2021. 3. 29. 18:12
자바 정렬 (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