Java/컬렉션

[Java]ArrayList 값 변경 방법

DevStory 2022. 8. 29.

ArrayList 값 변경

이번 포스팅은 ArrayList의 값을 변경할 수 있는 다양한 방법을 소개합니다.


방법 1. 특정 인덱스의 값을 변경

List 클래스에서 제공하는 set() 메서드를 사용하여 특정 인덱스의 값을 변경할 수 있습니다.

E set(int index, E element);

set() 메서드는 특정 인덱스(index)의 값을 설정된 값(element)으로 변경할 수 있으며, 변경 이전의 값을 반환합니다.

 

다음 예제는 int 타입의 List에서 0번째 인덱스의 값을 10으로 변경합니다.

public static void main(String args[]) {
  List<Integer> intList = new ArrayList<>(Arrays.asList(1, 2, 3));
  System.out.println("변경 전: " + intList);

  intList.set(0, 10);

  System.out.println("변경 후: " + intList);
}

[실행 결과]

변경 전: [1, 2, 3]
변경 후: [10, 2, 3]

만약, List의 인덱스를 벗어난 값을 set() 메서드에 전달하는 경우 IndexOutOfBoundsException이 발생합니다.

 

다음 예제는 3개의 요소가 할당된 List에서 set() 메서드를 사용하여 5번째 인덱스의 값을 변경했을 때, 예외가 발생하는 것을 보여줍니다.

public static void main(String args[]) {
  List<Integer> intList = new ArrayList<>(Arrays.asList(1, 2, 3));
  System.out.println("변경 전: " + intList);

  intList.set(5, 10);

  System.out.println("변경 후: " + intList);
}

[에러 내용]


방법 2. 특정 조건을 만족하는 값 변경

특정 조건을 만족하는 List의 모든 요소를 변경하고 싶은 경우 List 클래스에서 제공하는 replaceAll() 메서드를 사용할 수 있습니다.

default void replaceAll(UnaryOperator<E> operator)

replaceAll() 메서드는 함수형 인터페이스인 UnaryOperator의 타입을 매개변수로 가집니다. 따라서, 매개변수로 람다 표현식을 전달할 수 있습니다.

 

다음 예제는 int 타입의 List에서 요소의 값이 1인 경우 10을 곱한 값으로 변경합니다.

public static void main(String args[]) {
  List<Integer> intList = new ArrayList<>(Arrays.asList(1, 2, 3, 1, 2, 3));
  System.out.println("변경 전: " + intList);

  intList.replaceAll(num -> num == 1 ? num * 10 : num);

  System.out.println("변경 후: " + intList);
}

[실행 결과]

변경 전: [1, 2, 3, 1, 2, 3]
변경 후: [10, 2, 3, 10, 2, 3]

방법 3. 특정 값 변경

특정 조건이 아닌 특정 값을 다른 값으로 변경하기 위해 Collections.replaceAll() 메서드를 사용할 수 있습니다.

public static <T> boolean replaceAll(List<T> list, T oldVal, T newVal);

첫 번째 매개변수로 List 객체를 전달하고 두 번째 매개변수로 특정 값, 세 번째 매개변수로 변경하고 싶은 값을 전달합니다.

 

다음 예제는 int 타입의 List에서 1을 10으로 변경합니다.

public static void main(String args[]) {
  List<Integer> intList = new ArrayList<>(Arrays.asList(1, 2, 3, 1, 2, 3));
  System.out.println("변경 전: " + intList);

  Collections.replaceAll(intList, 1, 10);

  System.out.println("변경 후: " + intList);
}

[실행 결과]

변경 전: [1, 2, 3, 1, 2, 3]
변경 후: [10, 2, 3, 10, 2, 3]

방법 4. Stream API

Java 버전이 1.8 이상인 경우 Stream API를 사용하여 특정 조건을 만족하는 List의 모든 요소를 변경할 수 있습니다.

 

Stream API를 사용하는 방법의 장점은 기존 List의 값을 변경하지 않고 새로운 List를 생성한다는 것입니다.

 

[변경 방법]

순서 1. List를 스트림으로 변환합니다.

순서 2. map() 메서드를 호출하고 조건문을 메서드 또는 람다 표현식으로 전달합니다.

순서 3. 스트림을 List로 변환합니다.

public static void main(String args[]) {
  List<Integer> intList = new ArrayList<>(Arrays.asList(1, 2, 3, 1, 2, 3));
  System.out.println("변경 전: " + intList);

  List<Integer> newList = intList.stream()
          .map(num -> num == 1 ? num * 10 : num)
          .collect(Collectors.toList());

  System.out.println("변경 후: " + newList);
}

[실행 결과]

변경 전: [1, 2, 3, 1, 2, 3]
변경 후: [10, 2, 3, 10, 2, 3]
반응형

댓글