[Java] List 데이터 저장 역순 (reverse)

    Java에서 List 데이터의 값으로 오름차순을 하거나 내림차순을 하는 방법은 최하단 포스팅을 확인하시면 되며, 여기서는 데이터를 저장한 순서를 뒤집는 방법을 설명해보고자 합니다.

     

    데이터 세팅

    public static void main(String[] args) {
        String[] arrs = {"삼성전자","테슬라","비트코인","펄어비스","코카콜라"};
        List<String> list = new ArrayList<>(Arrays.asList(arrs));
    
        System.out.println("리버스 이전 리스트 -> " + list.toString());    
    }
    
    # 리버스 이전 리스트 -> [삼성전자, 테슬라, 비트코인, 펄어비스, 코카콜라]

     

    오늘은 주식이 우울한 관계로 떡상하자는 마음에 주식 종목들과 암호화폐 종목을 리스트 형으로 받아봤습니다.

     

    반복문 및 신규 리스트를 사용하여 뒤집기

    /**
     * 신규 리스트를 만들어서 뒤집기
     *
     * @param list
     * @return
     */
    public static void reverseList1(List<String> list) {
        List<String> rtnList = new ArrayList<> ();
        for(int i = list.size()-1; i >= 0; i--) rtnList.add(list.get(i));
        System.out.println("리버스 이후 리스트 -> " + rtnList);
    }
    
    # 리버스 이후 리스트 -> [코카콜라, 펄어비스, 비트코인, 테슬라, 삼성전자]

    우선 가장 기초적인 현재의 리스트를 반복문으로 뒤에서 앞으로 호출하여 신규 리스트에 담는 방식으로, 로직이 깔끔하나 신규 리스트를 생성해야 하는 불편함이 있습니다.

     

    /**
     * 신규 리스트를 만들어서 뒤집기
     *
     * @param list
     * @return
     */
    public static void reverseList1(List<String> list) {
        List<String> rtnList = new ArrayList<> ();
        for(int i = list.size()-1; i >= 0; i--) rtnList.add(list.get(i));
        list = rtnList;
        System.out.println("리버스 이후 리스트 -> " + list);
    }
    
    리버스 이후 리스트 -> [코카콜라, 펄어비스, 비트코인, 테슬라, 삼성전자]

    위 내용은 temp list(rtnList)를 만들어서 우선 temp list에 세팅을 한 후, list에 대입하는 방식입니다. 신규 리스트를 받기 싫은 경우 이러한 방식을 사용하셔도 됩니다. 신규 리스트를 만들어서 값을 세팅하는 방법의 단점은 거대한 데이터의 경우 garbage collection이 발동될 수 있다는 문제가 있습니다. 

     

     

    반복문 및 기존 리스트를 변경하여 뒤집기

    /**
     * 중간을 기반으로 뒤집기
     *
     * @param list
     */
    public static void reverseList2(List<String> list) {
        for(int i = 0; i < list.size()/2; i++) {
            String tempStr = list.get(i);
            list.set(i, list.get(list.size()-i-1));
            list.set(list.size()-i-1, tempStr);
        }
        System.out.println("리버스 이후 리스트 -> " + list);
    }
    
    # 리버스 이후 리스트 -> [코카콜라, 펄어비스, 비트코인, 테슬라, 삼성전자]

    위에 있는 list보다 좀 더 복잡한 방식으로 리스트의 중간을 기점으로 끝을 서로 교환하는 방식입니다. 위 로직이 이해가 안된다면, 아래의 그림을 생각하면 좀 쉬워집니다.

     

    중간 기반 뒤집기 로직

     

     

    Collections를 사용하여 뒤집기

    Collections.reverse(list);
    System.out.println("리버스 이후 리스트 -> " + list);
    
    # 리버스 이후 리스트 -> [코카콜라, 펄어비스, 비트코인, 테슬라, 삼성전자]

     

    마지막으로 가장 깔끔하고, 권장하는 방식으로 Collections의 메소드인 reverse를 사용하는 방식입니다. 다른 문제가 없다면 List나 Set 등은 Collections으로 핸들링하는 것이 가장 쉽고 유지보수성에서 유리합니다.

     

    데이터의 값(ex: 가나다순)을 정렬하고 싶은 경우 아래의 포스팅을 보면 됩니다.

    [Java] List형 쉽게 정렬하는 방법

     

    [Java] List형 쉽게 정렬하는 방법

    간혹 프로젝트를 하다보면, 정렬을 어렵게 수행하는 사람들을 보는 경우가 있다. 예를 들어 sort algorithm을 별도로 만들어서 리스트 데이터를 정렬하는 경우를 본적이 있는데, 복잡한 구조라면

    needjarvis.tistory.com

     

    댓글

    Designed by JB FACTORY