web developer

[java] new ArrayList<>() / Arrays.asList() / List.of() 본문

Language/Java

[java] new ArrayList<>() / Arrays.asList() / List.of()

trueman 2023. 2. 6. 23:47
728x90
728x90

new ArrayList<>() / Arrays.asList() / List.of()


import java.util.ArrayList; // new ArrayList<>()
import java.util.Arrays; // Arrays.asList()
import java.util.List;	// List.of()

new ArrayList<>()


ArrayList는 List 인터페이스를 상속받은 클래스로 크기가 가변적으로 변하는 선형리스트입니다.

ArrayList란 Collection 프레임워크의 일부이며 java.util 패키지에 소속되어 있습니다. List 인터페이스에서 상속받아 사용이 됩니다.

일반적인 배열과 같은 순차리스트이며 인덱스로 내부의 객체를 관리한다는점등이 유사하지만 한번 생성되면 크기가 변하지 않는 배열과는 달리 ArrayList는 객체들이 추가되어 저장 용량(capacity)을 초과한다면 자동으로 부족한 크기만큼 저장 용량(capacity)이 늘어난다는 특징을 가지고 있습니다.


Arrays.asList() 


Array를 List 처럼 사용할 수 있게 도와주는 클래스

Arrays.asList()의 리턴값은 java.util.ArrayList이 아닌 Arrays 클래스의 내부클래스 ArrayList ( java.util.Arrays) 입니다.

Arrays.asList()는 리스트를 초기화할 때 자주 사용된다.

java.util.Arrays의 ArrayList 클래스는 remove(), add() 메소드를 제공하지 않고 set(), get(), contains()를 제공한다. 배열에 엘리먼트를 추가하거나 삭제할 수 없어서 배열의 사이즈를 변경할 수 없다.
String[] tag = {"first", "second", "third"};

// List<> list = new ArrayList<>(); 대신 사용이 가능하다.
List<String> list = Arrays.asList(tag);

tag[0] += "_tag"  // 배열 1번째 엘리먼트 값 뒤에 "_tag"를 추가
list.set(1, list.get(1) + "_tag");   // 1번째 엘리먼트에 뒤에 "_tag"값을 추가

// 출력
["first_tag", "second_tag", "third"]

- Arrays.asList의 간단한 사용법은 new ArrayList()를 대신하여 사용할 수 있다.

- 위의 코드와 주석에서 알 수 있듯이 strs 배열을 .asList()를 이용하여 List 형태로 변환하였는데 배열의 0번째 값과 List의 1번째 값을 변경하였을때 이 둘을 모두 출력하면 위 코드와 같이 모두 변경된 배열이 출력이 된다.

- List의 내부 구조는 배열로 되어있는데 .asList를 이용하여 List의 객체를 만들면 원본 배열의 주소값을 가져오게 된다. 그래서 List의 값을 변경해도 배열의 값이 변경 되는 것이다.


List.of()


List.of() 메서드는 JAVA 9 부터 지원하는 메서드입니다.


차이점


 원소를 추가/삭제할 수 있나?

  원소를 추가/삭제 set 사용 가능
new ArrayList<>() 가능 가능
Arrays.asList() 불가능 가능
List.of() 불가능 불가능

null을 가질수 있는가?

new ArrayList<>()는 null을 가질 수 있다.

Arrays.asList()는 null을 가질 수 있다.

List.of()는 null을 가질 수 없다.


불변

List.of()는 참조한 원본 배열의 값이 바뀌어도 List의 값은 바뀌지 않는다.

Arrays.asList()는 참조한 원본 배열의 값이 바뀌면 List의 값도 바뀌고, List의 값이 바뀌면 원본 배열의 값도 바뀐다.


마무리

- 배열의 size가 변하면 안 되거나 변할 필요가 없을 때 List.of()를 사용한다.

- null값을 테스트 해야한다면 Arrays.asList()를 사용한다.

- 그 외 프로덕션 코드에서는 new ArrayList<>()를 사용하여 컬렉션 생성 시, 새로운 주소값으로 할당하여 의도치 않는 변화를 막는다.(방어적 복사)


https://eatnows.tistory.com/75 

 

[JAVA] Arrays.asList()

Arrays.asList Arrays.asList의 패키지는 java.util.Arrays로 보통의 사용하던 java.util.ArrayList의 ArrayList와는 다르다. java.util.Arrays의 ArrayList 클래스는 remove(), add() 메소드를 제공하지 않고 set(), get(), contains()를

eatnows.tistory.com

https://coding-factory.tistory.com/551

 

[Java] 자바 ArrayList 사용법 & 예제 총정리

ArrayList란? ArrayList는 List 인터페이스를 상속받은 클래스로 크기가 가변적으로 변하는 선형리스트입니다. 일반적인 배열과 같은 순차리스트이며 인덱스로 내부의 객체를 관리한다는점등이 유사

coding-factory.tistory.com

 

728x90
728x90