본문 바로가기

Java/Java 알고리즘

[알고리즘] 3-5. 자바의 정렬

반응형

1. 기본 타입

int [] data = new int [capacity];

Arrays.sort(data);
//int 배열이 모두 꽉 차있을 경우

Arrays.sort(data, 0, size);
//int 배열이 size-1까지 size개만 있을 경우

 

2.객체의 문자열 정렬

String [] fruits = new String[] {"Pineapple", "Apple", "Oragne", "Banana"};
Arrays.sort(fruits);
for(String name : fruits)
 System.out.println(name);

 

3.ArrayList의 문자열 정렬

List<String> fruits = new ArrayList<String>(); 
fruits.add("Pineapple"); 
fruits.add("Apple");
fruits.add("Oragne");
fruits.add("Banana");

Collections.sort(fruits);
for(String name : fruits)
 System.out.println(name);

 

4. 사용자 정의 객체 정렬

public class Fruit {
 public String name;
 public int quantity;
 public Fruit(String name, int quantity) {
  this.name = name;
  this.quantity = quantity;
 }
}

//somewhere in your program
Fruit [] fruits = new Fruit[4];
fruits[0] = new Fruits("Pineapple",70); 
fruits[1] = new Fruits("Apple", 100);
fruits[2] = new Fruits("Oragne", 80);
fruits[3] = new Fruits("Banana", 90);

Arrays.sort(fruits);

5. Comparable 인터페이스 정렬 [이름 순 정렬]

public class Fruit implements Comparable<Fruit>{
 public String name;
 public int quantity;
 public Fruit(String name, int quantity) {
  this.name = name;
  this.quantity = quantity;
 }
 public int compareTo(Fruit other) {
  return name.compareTo(other.name);
  }
}

//somewhere in your program
Fruit [] fruits = new Fruit[4];
fruits[0] = new Fruits("Pineapple",70); 
fruits[1] = new Fruits("Apple", 100);
fruits[2] = new Fruits("Oragne", 80);
fruits[3] = new Fruits("Banana", 90);

Arrays.sort(fruits);

 

6. 변수로 정렬 [재고 수량 순 정렬]

public class Fruit implements Comparable<Fruit> {   
 public String name; 
 public int quantity;
 public Fruit(String name, int quantity) {

 this.name = name;

 this.quantity = quantity;

 }

 public int compareTo(Fruit other) {  
 return quantity - other.quantity;

 } 
}

// somewhere in your program
Fruit [] fruits = new Fruit[4];   
fruits[0] = new Fruit("Pineapple",70); 
fruits[1] = new Fruit("Apple",100); 
fruits[2] = new Fruit("Orange",80); 
fruits[3] = new Fruit("Banana",90);   

Arrays.sort(fruits);

 

7. 두 가지 기준 정렬 -Comparator

//Comparator 클래스를 extends하고, compare 메서드를 오버라이딩하는 클래스 정의 후
//그 클래스의 객체를 하나 생성

Comparator<Fruit> nameComparator = new Comparator<Fruit>() {   
 public int compare(Fruit fruit1, Fruit fruit2) {   
 return fruit1.name.compareTo(fruit2.name);   
 }   
};

Comparator<Fruit> quantComparator = new Comparator<Fruit>() { 
 public int compare(Fruit fruit1, Fruit fruit2) {   
 return fruit1.quantity - fruit2.quantity;   
 }   
};

Arrays.sort(fruits, nameComparator);
// or
//Arrays.sort(fruits, quantComparator);

//comparator 객체 지정은?

 

8. 데이터 객체의 정적 변수 지정

public class Fruit {   
 public String name; 
 public int quantity;
 public Fruit(String name, int quantity) {

 this.name = name;

 this.quantity = quantity;

 }
 public static Comparator<Fruit> nameComparator = new Comparator<Fruit>() { 
 public int compare(Fruit fruit1, Fruit fruit2) {   
 return fruit1.name.compareTo(fruit2.name);   
 }   
 };
 public static Comparator<Fruit> quantComparator = new Comparator<Fruit>(){
 public int compare(Fruit fruit1, Fruit fruit2) {   
 return fruit1.quantity - fruit2.quantity;   
 }   
 };
}

 

따라서,

//정렬 시

Arrays.sort(fruits, Fruit.nameComparator);
반응형