1. Collections

  1. [사용법]
    1. public static void sort(List<T> list)

    2. public static void sort(List<T> list, Comparator<? super T> c)

    3. [오름차순(sort)]

      1. [설명]

        1. ArrayList를 오름차순으로 정렬함
      2. [예제]

        // ArrayList 생성
        ArrayList<String> list = new ArrayList<>(Arrays.asList("A", "C", "F", "B"));
        
        // 오름차순
        Collections.sort(list);
        
        // 결과 [A, B, C, F]
        System.out.println(list);
        
    4. [내림차순(reverseOrder)]

      1. [설명]

        1. Collections.sort()의 2번째 파라미터로 내림차순 정렬을 나타내는 Comparator를 전달해서, ArrayList를 내림차순으로 정렬함
      2. [예제]

        // ArrayList 생성
        ArrayList<String> list = new ArrayList<>(Arrays.asList("A", "C", "F", "B"));
        
        // 내림차순
        Collections.sort(
        	list, Collections.reverseOrder()
        );
        
        // 결과 [F, C, B, A]
        System.out.println(list);
        
    5. [대소문자 구분없이 오름차순]

      1. [설명]

        1. String.CASE_INSENSITVE_ORDER를 전달하면, 대소문자 구분없이 오름차순으로 정렬됨
        2. ‘a’와 ‘A’는 같은 순위로 취급되므로, 원래의 순서를 유지함
      2. [예제]

        // ArrayList 생성
        ArrayList<String> list = new ArrayList<>(Arrays.asList("A", "C", "F", "B", "a"));
        
        // 대소문자 구분없이 오름차순
        Collections.sort(
        	list, 
        	String.CASE_INSENSITIVE_ORDER
        );
        
        // 결과 [a, A, B, C, F]
        System.out.println(list);
        
    6. [대소문자 구분없이 내림차순]

      1. [설명]

        1. 대소문자 구분없이, 내림차순으로 정렬함
      2. [예제]

        // ArrayList 생성
        ArrayList<String> list = new ArrayList<>(Arrays.asList("A", "C", "F", "B", "a"));
        
        // 대소문자 구분없이 내림차순
        Collections.sort(
        	list, 
        	Collections.reverseOrder(
        		String.CASE_INSENSITIVE_ORDER
        	)
        );
        
        // 결과 [F, C, B, a, A]
        System.out.println(list);
        

2. List

  1. [사용법]
    1. default void sort(Comparator<? super E> c);

    2. Java8 이후부터는 List에서는 sort() 메서드를 호출하여 정렬할 수 있게 됨

    3. [오름차순]

      1. [예제]

        // ArrayList 생성
        ArrayList<String> list = new ArrayList<>(Arrays.asList("F", "A", "B", "a"));
        // [F, A, B, a]
        System.out.println(list);  
        
        // 오름차순으로 정렬
        list.sort(Comparator.naturalOrder());
        // [A, B, F, a]
        System.out.println(list);  
        
    4. [내림차순]

      1. [예제]

        // ArrayList 생성
        ArrayList<String> list = new ArrayList<>(Arrays.asList("F", "A", "B", "a"));
        // [F, A, B, a]
        System.out.println(list);  
        
        // 내림차순으로 정렬
        list.sort(Comparator.reverseOrder());
        // [a, F, B, A]
        System.out.println(list); 
        
    5. [대소문자 구분없이 오름차순 정렬]

      1. [예제]

        // ArrayList 생성
        ArrayList<String> list = new ArrayList<>(Arrays.asList("F", "A", "B", "a"));
        // [F, A, B, a]
        System.out.println(list);  
        
        // 대소문자 구분없이 오름차순 정렬
        list.sort(
        	String.CASE_INSENSITIVE_ORDER
        );
        // [a, A, B, F]
        System.out.println(list);
        
    6. [대소문자 구분없이 내림차순 정렬]

      1. [예제]

        // ArrayList 생성
        ArrayList<String> list = new ArrayList<>(Arrays.asList("F", "A", "B", "a"));
        // [F, A, B, a]
        System.out.println(list);  
        
        // 대소문자 구분없이 내림차순 정렬
        list.sort(
        	Collections.reverseOrder(
        		String.CASE_INSENSITIVE_ORDER
        	)
        );
        // [F, B, a, A]
        System.out.println(list);
        

3. 사용자 정의

  1. [설명]
    1. 사용자가 정의한 객체를, 사용자가 원하는 방식으로 정렬하기 위해 Comparable 인터페이스를 구현하여, 객체의 정렬 방식을 지정할 수 도 있으며, Comparator 인터페이스를 구현하여, Custom Comparator를 직접 만들 수 도 있음
  2. [Comparable]
    1. [설명]

      1. Collections.sort() 메서드는 객체를 정렬할 때, 해당 객체의 Comparable을 구현한 comparable interface를 구현하고, compareTo()메서드 안에 정렬 기준이 정의된다면, Collections.sort() 메서드를 사용하여 객체를 정렬할 수 있음
      2. 사용자가 직접 Comparartor interface를 implements하여 Comparator를 만들 수 있음
      3. Collections.sort() or List.sort() 메서드의 파라미터로 전달되어, 정렬의 기준이 됨
    2. [예제]

      // ArrayList 생성
      ArrayList<Unit> list = new ArrayList<>();
      
      // list 생성
      list.add(new Unit("Marine", 80));
      list.add(new Unit("Firebet", 100));
      list.add(new Unit("Madic", 70));
      
      // unit hp순 오름차순 정렬
      Collections.sort(list, new UnitHpComparator());
      
      // [[Madic:70],[Marine:80],[Firebet:100]]
      System.out.println(list);
      
      // unit hp순 내림차순 정렬
      Collections.sort(list, new UnitHpComparator().reversed());
      
      // [[Firebet:100],[Marine:80],[Madic:70]]
      System.out.println(list);
      
      // unit name순 오름차순 정렬
      Collections.sort(list, new UnitNameComparator());
      
      // [[Firebet:100],[Madic:70],[Marine:80]]
      System.out.println(list);
      
      // unit name순 내림차순 정렬
      Collections.sort(list, new UnitNameComparator().reversed());
      
      // [[Marine:80],[Madic:70],[Firebet:100]]
      System.out.println(list);