본문 바로가기

코딩/Java

자바 - 리스트 선언 시, 요소 값을 넣어 초기화하는 법

반응형
public class ListExample {
    public static void main(String[] args) {
        int[] array = { 1, 2, 3 };
    }
}

위와 같이 배열은 선언 시, 원하는 요소를 넣을 수 있지만 리스트는 불가능하다.

 

 

import java.util.List;
import java.util.Arrays;

public class ListExample {
    public static void main(String[] args) {
        List<Integer> listOne = List.of(1, 2, 3);    
        List<Integer> listTwo = Arrays.asList(10, 20, 30);

        System.out.println(listOne.getClass().getName()); // java.util.ImmutableCollections$ListN (Immutable한 List이기에 요소 값 수정/추가/삭제 불가)
        System.out.println(listTwo.getClass().getName()); // java.util.Arrays$ArrayList (Array를 기반으로 한 List이며 사이즈는 고정)

        System.out.println(listOne); // [1, 2, 3]
        System.out.println(listTwo); // [10, 20, 30]
    }
}

List.of()Arrays.asList() 같은 방법으로 리스트 선언과 함께 요소를 추가할 수 있지만,

선언된 리스트가 ArrayList가 아니기 때문에, 요소를 추가하는 기능 등등 제한이 있다.

 

해결법

import java.util.List;
import java.util.Arrays;
import java.util.ArrayList;

public class ListExample {
    public static void main(String[] args) {
        List<Integer> listOne = new ArrayList<>(List.of(1, 2, 3));
        List<Integer> listTwo = new ArrayList<>(Arrays.asList(10, 20, 30));

        System.out.println(listOne.getClass().getName()); // java.util.ArrayList
        System.out.println(listTwo.getClass().getName()); // java.util.ArrayList

        listOne.add(4);  // 4 추가
        listTwo.add(40); // 40 추가

        listOne.remove(0); // 맨 앞 요소 삭제
        listTwo.remove(0); // 맨 앞 요소 삭제

        System.out.println(listOne); // [2, 3, 4]
        System.out.println(listTwo); // [20, 30, 40]
    }
}

위와 같이 ArrayList 선언 시, 인수를 List.of() 혹은 Arrays.asList()을 넣으면 된다.

결과로 두 리스트의 클래스 이름 출력 시, ArrayList라는 클래스 이름이 출력된다 그리고 add()remove() 함수가 정상 작동한다.

반응형