JAVA/자료구조

JAVA 여러가지 자료구조 SORT 방법

수달하나 2021. 8. 14. 18:16

 

  • Array

배열을 제외한 다른 자료구조는 Collections.sort() 함수를 사용해 정렬하지만 배열을 정렬하는 방법은 Arrays.sort() 함수를 이용해서 처리한다. (두 함수 모두 java.util 라이브러리 사용)

Integer[] arr = new Integer[10];

//오른차순 정렬
Arrays.sort(arr);
//내림차순 정렬
Arrays.sort(arr, Collections.reverseOrder());

 

  • List (ArrayList) + DoubleList(ArrayList<ArrayList>)

단일리스트 정렬

List<String> list = new ArrayList<String>();
        
Collections.sort(list); //오름차순 정렬
Collections.sort(list, Collections.reverseOrder()); //내림차순 정렬

 

이중리스트 정렬

List<ArrayList<Integer>> doubleList = new ArrayList<ArrayList<Integer>>();
//이중 리스트의 3번째 요소를 기준으로 정렬
        
Collections.sort(doubleList, (o1, o2) -> o1.get(2).compareTo(o2.get(2))); //오름차순 정렬
Collections.sort(doubleList, (o1, o2) -> o2.get(2).compareTo(o1.get(2))); //내림차순 정렬

 

  • Set (HashSet)

Set의 경우는 List로 변환한 후에 그 List를 정렬한다.    

Set<String> set = new HashSet<String>();
       
List<String> setToList = new ArrayList<String>(set);// list 변환
Collections.sort(setToList);//오름차순 정렬
Collections.sort(setToList, Collections.reverseOrder());//내림차순 정렬

 

  • Map (HashMap)

Map을 사용할 경우에는 TreeMap을 사용하면 자동으로 key값을 기준으로 정렬되지만 HashMap을 통해 정렬한다.

Map<String, Integer> map = new HashMap<String, Integer>();

// key 를 기준으로 정렬 1
Object[] sortByKeyArr = map.keySet().toArray();
Arrays.sort(sortByKeyArr); // 오름차순
Arrays.sort(sortByKeyArr, Collections.reverseOrder()); // 내림차순

// key 를 기준으로 정렬 2
List<String> sortByKeyList = new ArrayList<>(map.keySet());
Collections.sort(sortByKeyList); //오름차순
Collections.sort(sortByKeyList, Collections.reverseOrder()); // 내림차순

// value 를 기준으로 정렬하기
List<String> mapToList = new ArrayList<>(map.keySet()); // list 변환
//람다 함수 이용해서 value 정렬
Collections.sort(mapToList, (o1, o2) -> map.get(o1).compareTo(map.get(o2))); //오름차순
Collections.sort(mapToList, (o1, o2) -> map.get(o2).compareTo(map.get(01))); // 내림차순

 

위와 같은 방식의 sort 공식을 이용해서 ArrayList를 value 값으로 가지고 있는 Map도 정렬할 수 있다.

Map<String, ArrayList<Integer>> mapDoubleList = new HashMap<String, ArrayList<Integer>>();
        
List<String> mapDoubleListToList = new ArrayList<>(mapDoubleList.keySet()); // list 변환
// List의 2번째 요소를 기준으로 오름차순
Collections.sort(mapDoubleListToList, 
	(o1, o2) -> mapDoubleList.get(o1).get(1).compareTo(mapDoubleList.get(o2).get(1)));
// List의 2번째 요소를 기준으로 내림 차순
Collections.sort(mapDoubleListToList, 
	(o1, o2) -> mapDoubleList.get(o2).get(1).compareTo(mapDoubleList.get(o1).get(1)));