공부한 기록/Programming Language

Java - 컬렉션 프레임워크 Collection Framework

YongE 2024. 4. 20. 12:01

컬렉션


 

동일 객체를 여러 개 저장하고 조작할 때가 자주 있다. 요소를 하나 추가한다고 했을 때 배열은 고정된 크기이므로 새로운 크기의 배열을 생성하고 다시 요소를 순서대로 집어넣는 과정이 필요하다. 그런데 이러한 과정은 성능이 좋지 않다.

 

컬렉션이란, 데이터를 한 곳에 모아서 편하게 저장 및 관리하는 가변 크기의 객체 컨테이너이다. 동일하거나 유사한 객체 집단을 저장 및 조작하기 위한 코드가 필요했기 때문에 생겨났다. 컬렉션 프레임워크는 이러한 객체를 모아 효율적으로 관리할 수 있도록 해준다. 

 

컬렉션의 구조

 

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 컬렉션

선입선출 방식이며, 원소가 중복될 수가 있다.

 

Java에서의 Queue 메소드

 

 

Set 컬렉션

순서가 없고 중복되지 않는 자료구조를 지원한다. 이 컬렉션에는 인덱스가 없다.

 

그럼 원하는 값을 찾을 때 어떻게 그 값이라는 것을 알 수 있을까? 해당 객체의 hashCode 반환값이 다른 객체와 동일한 경우에 알 수 있다.

 

 

 

Map 인터페이스


 

키와 값의 쌍으로 구성된 객체 저장 자료구조. 다른 컬렉션과 마찬가지로 of() 팩토리 메소드로 생성했다면 put, remove, clear 같은 내용 변경이나 크기를 변경시키는 메소드를 사용할 수 없다. 특히 Hash Map은 키와 값에 null 사용할 수 있으나 Hash Table은 불가하다.

728x90
반응형