반응형
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() 함수가 정상 작동한다.
반응형
'코딩 > Java' 카테고리의 다른 글
자바 - 문자열에서 특정 문자/문자열 찾기 (indexOf() 메소드) (0) | 2024.11.17 |
---|---|
자바 - 다운캐스팅 사용 이유 (1) | 2024.11.15 |
자바 - Child obj = new Child()와 Parent obj = new Child() 차이 (feat. 업캐스팅) (0) | 2024.11.12 |
자바 - 객체 vs 인스턴스 뭔 차이? (0) | 2024.11.08 |
자바 - 변수의 데이터 타입 확인 방법 (0) | 2024.04.20 |