반응형

배열에 들어 있는 값을 정렬하기 위해서는 소팅 로직을 작성합니다.
이를 자바에서 제공하는 Collections객체의 sort()함수를 이용하여 데이터를 정렬해 보겠습니다.

 

1차원 배열

1차원 배열을 정렬합니다.

 

■ SOURCE

    private static void sortBasic() {
        
        ArrayList<String> arrData = new ArrayList<String>();
        
        arrData.add( "F" ); arrData.add( "B" ); arrData.add( "C" ); arrData.add( "A" ); arrData.add( "Z" );
        
        System.out.println( "정렬 전 : " + arrData );
        
        Collections.sort( arrData );
        
        System.out.println( "정렬 후 : " + arrData );
    }

 

소스가 워낙 간단해서 따로 설명할게 없는 것 같습니다.

Collections.sort()의 인자 값으로 1차원배열 데이터를 넣어주면 됩니다.

 

■ RESULT

 

   정렬 전 : [F, B, C, A, Z]
정렬 후 : [A, B, C, F, Z]

 

2차원 배열

이번에는 2차원 배열의 Data를 정렬해 보도록 하겠습니다.

2차원 배열의 경우, Key를 만들고 Key값으로 정렬을 해야 합니다.

하고보니... 정렬 로직짜는 것과 뭔 차인가 싶기도 하네요.

 

■ SOURCE

    private static void sortArr2() {
        
        ArrayList<ArrayList<String>> arr2Data = getArr2Data();
        
        System.out.println( "정렬 전 :" );
        for( int i = 0; i < arr2Data.size(); i++ ) System.out.println( arr2Data.get( i ) );
        
        // 정렬할 key를 지정한다.
        // 에문에서는 첫번째 열의 데이터를 Key로 설정하여 정렬한다.
        ArrayList<ArrayList<String>> arr2Result = new ArrayList<ArrayList<String>>();  // 정렬한 결과
        
        // Key에 해당하는 Data를 추출하고, 정렬한다.
        ArrayList<String> arrSortKey = new ArrayList<String>();
        for( int i = 0; i < arr2Data.size(); i++ ) arrSortKey.add( arr2Data.get( i ).get( 0 ) );
        Collections.sort( arrSortKey );
        
        // 정렬된 Key정보를 이용하여 데이터를 추출/적재한다.
        for( int i = 0; i < arrSortKey.size(); i++ ) {
            
            for( int k = 0; k < arr2Data.size(); k++ ) {
                
                if( arrSortKey.get( i ).equals( arr2Data.get( k ).get( 0 ) ) ) {
                    
                    ArrayList<String> arrResult = arr2Data.get( k );
                    arr2Result.add( arrResult );
                    break;
                }
            }
        }
        
        System.out.println( "정렬 후 :" );
        for( int i = 0; i < arr2Result.size(); i++ ) System.out.println( arr2Result.get( i ) );
    }
    
    // 2차원배열 Sample-data
    private static ArrayList<ArrayList<String>> getArr2Data() {
        
        ArrayList<ArrayList<String>> arr2Data = new ArrayList<ArrayList<String>>(); 
        ArrayList<String> arrData = new ArrayList<String>();
        
        arrData.add( "F1" ); arrData.add( "F2" ); arrData.add( "F3" ); arr2Data.add( arrData );
        
        arrData = new ArrayList<String>();
        arrData.add( "B1" ); arrData.add( "B2" ); arrData.add( "B3" ); arr2Data.add( arrData );
        
        arrData = new ArrayList<String>();
        arrData.add( "C1" ); arrData.add( "C2" ); arrData.add( "C3" ); arr2Data.add( arrData );
        
        arrData = new ArrayList<String>();
        arrData.add( "A1" ); arrData.add( "A2" ); arrData.add( "A3" ); arr2Data.add( arrData );
        
        arrData = new ArrayList<String>();
        arrData.add( "Z1" ); arrData.add( "Z2" ); arrData.add( "Z3" ); arr2Data.add( arrData );
        
        return arr2Data;
    }

 

2차원배열은 바로 정렬이 되지 않기 때문에, 정렬할 Key를 ArrayList로 만들어서 처리해야 합니다.

    // Key에 해당하는 Data를 추출하고, 정렬한다.
    ArrayList<String> arrSortKey = new ArrayList<String>();
    for( int i = 0; i < arr2Data.size(); i++ ) arrSortKey.add( arr2Data.get( i ).get( 0 ) );
    Collections.sort( arrSortKey );

Key로 사용할 arrSortKey를 Collections.sort()를 이용하여 정렬하였습니다.

그리고, 새로운 2차원배열 객체를 생성하고, arrSortKey의 순서대로 데이터를 세팅합니다.

 

■ RESULT

 

  

정렬 전 :
[F1, F2, F3]
[B1, B2, B3]
[C1, C2, C3]
[A1, A2, A3]
[Z1, Z2, Z3]

정렬 후 :
[A1, A2, A3]
[B1, B2, B3]
[C1, C2, C3]
[F1, F2, F3]
[Z1, Z2, Z3]

 

※ 참고
   - 링크 ☞ 버블 정렬( Bubble Sort )를 이용한 데이터 정렬하기

 

끝.

반응형