컬렉션
동일 객체를 여러 개 저장하고 조작할 때가 자주 있다. 요소를 하나 추가한다고 했을 때 배열은 고정된 크기이므로 새로운 크기의 배열을 생성하고 다시 요소를 순서대로 집어넣는 과정이 필요하다. 그런데 이러한 과정은 성능이 좋지 않다.
컬렉션이란, 데이터를 한 곳에 모아서 편하게 저장 및 관리하는 가변 크기의 객체 컨테이너이다. 동일하거나 유사한 객체 집단을 저장 및 조작하기 위한 코드가 필요했기 때문에 생겨났다. 컬렉션 프레임워크는 이러한 객체를 모아 효율적으로 관리할 수 있도록 해준다.
List, Queue, Set 차이는 다음과 같다.
첨언하자면, Map에서는 반복자가 제공되지 않는다.
여러 컬렉션 인터페이스
List 컬렉션
위의 설명처럼 객체 순서가 있고, 원소가 중복될 수 있으며, 크기가 가변적이다. 다만, of() 메소드를 사용할 경우, 리스트의 크기와 요소가 불변이다. 예제 코드를 보자.
List<String> lists = List.of("그랜저", "소나타", "아반테", "제네시스");
lists.set(1, "페라리"); //UnSurporttedException 에러
크기와 요소의 변경을 허락하지 않는 리스트 타입 객체가 생성된 것을 볼 수 있다. 참고로 요소는 null이 될 수 없다.
다음과 같은 코드로 배열과 List 타입 사이를 오갈 수 있다.
public static <T> List<T> asList<T...a> -- List로 반환, 이 또한 크기가 불변이다.
<T> T[] toArray(T[] a) -- array 반환
- Stack 클래스 : 후입선출 방식의 클래스다. 인덱스는 1번부터 시작한다.
- LinkedList 클래스 : 메모리 부담 크고 get 연산이 느리지만 추가/삭제가 빠르다.
Queue 컬렉션
선입선출 방식이며, 원소가 중복될 수가 있다.
Set 컬렉션
순서가 없고 중복되지 않는 자료구조를 지원한다. 이 컬렉션에는 인덱스가 없다.
그럼 원하는 값을 찾을 때 어떻게 그 값이라는 것을 알 수 있을까? 해당 객체의 hashCode 반환값이 다른 객체와 동일한 경우에 알 수 있다.
Map 인터페이스
키와 값의 쌍으로 구성된 객체 저장 자료구조. 다른 컬렉션과 마찬가지로 of() 팩토리 메소드로 생성했다면 put, remove, clear 같은 내용 변경이나 크기를 변경시키는 메소드를 사용할 수 없다. 특히 Hash Map은 키와 값에 null 사용할 수 있으나 Hash Table은 불가하다.
'기록 > Programming Language' 카테고리의 다른 글
Java - GUI (0) | 2024.06.06 |
---|---|
Java - 스트림 Stream (2) (1) | 2024.06.05 |
Java - 스트림 Stream (0) | 2024.04.24 |
Java - 람다식과 함수형 인터페이스(Predicate, Consumer, Supplier, Function, Operator) (0) | 2024.04.17 |
Java - 인터페이스와 특수 클래스(추상 클래스) (0) | 2024.04.15 |