프로그램언어/자바(Java)

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

Steve Jang 2022. 4. 27. 20:58

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