본문 바로가기
공부일기/JAVA

JAVA 공부일기1-12

by 고다나 2023. 4. 30.
Java의 정석 기초편
Chapter11 컬렉션 프레임웍

 

1. 컬렉션 프레임웍

컬렌션 프레임웍이란? 데이터 군을 저장하는 클래스들을 표준화한 설계. 데이터 군을 다루고 표현하기 위한 단일화된 구조. (컬렉션: 다수의 데이터, 데이터 그룹. 프레임웍: 표준화된 프로그래밍 방식)

 

3가지 타입의 컬렉션데이터 그룹- List, Set, Map

자바의정석 기초편2 p389
자바의정석 기초편2 p389

 

2. List인터페이스

자바의정석 기초편2 p391

ArrayList

기존의 Vector를 개선한 것.(Vector는 기존 작성된 소스와의 호환성을 위해 남겨둠.)

Object 배열을 이용해서 데이터를 순차적으로 저장. 배열에 더 이상 저장할 공간이 없으면 보다 큰 새로운 배열을 생성해 기존의 배열에 저장된 내용을 새로운 배열로 복사한 다음에 저장. 모든 종류의 객체를 담을 수 있음.

요소를 삭제하는 경우 삭제할 객체를 덮어쓰는 방식으로 처리. 배열에 객체를 순차적으로 추가 또는 마지막부터 삭제하면 데이터를 옮기지 않아도 되어 작업시간 ↓, 배열의 중간에 위치한 객체를 추가 또는 삭제할 경우 다른 데이터의 위치를 이동시켜야 하기 때문에 작업시간 ↑.

 

LinkedList

배열의 단점을 보완하기 위해서 고안. 배열은 모든 데이터가 연속적으로 존재하지만, 링크드 리스트는 불연속적으로 존재하는 데이터를 서로 연결한 형태로 구성. 링크드 리스트의 각 요소들은 자신과 연결된 다음 요소에 대한 참조(주소값)와 데이터로 구성. 참조만 변경해주면 되기 때문에 추가와 삭제가 빠름. 불연속으로 위치한 요소들이 연결된 것이라 처음부터 n번째 데이터까지 차례대로 따라가야 접근 가능하므로 접근시간 ↑.

 

컬렉션 읽기(접근시간) 추가/삭제 비고
ArrayList 빠름 느림 순차적인 추가삭제는 더 빠름. 비효율적인 메모리 사용.
데이터 개수가 변하지 않는 경우 사용.
LinkedList 느림 빠름 데이터가 많을 수록 접근성 떨어짐.
데이터 개수 변경이 잦을 경우 사용.

 

Stack과 Queue

자바의정석 기초편2 p403

순차적으로 데이터를 추가하고 삭제하는 스택에는 ArrayList와 같은 배열기반의 컬렉션 클래스가 적합하고, 큐는 데이터의 추가/삭제가 쉬운 LinkedList로 구현.

 

3. Set인터페이스

자바의정석 기초편2 p392

 

HashSet

중복된 값은 저장되지 않고, 저장 순서를 유지하지 않음. 저장순서를 유지하고자 한다면 LinkedHashSet 사용.

 

TreeSet

이진 검색 트리(레드-블랙트리)라는 자료구조의 형태로 데이터를 저장하는 컬랙션 클래스. 여러 개의 노드가 서료 연결된 구조로, 각 노드에 최대 2개의 노드를 연결할 수 있으며, 루트인 하나의 노드에서부터 시작해서 계속해서 확장.

정렬, 검색, 범위검색 성능↑, 노드의 추가, 삭제는 시간 ↑.

위아래로 연결된 노드는 '부모-자식관계'. 왼쪽에는 부모노드의 값보다 작은 값의 자식노드를, 오른쪽에는 부모노드의 값보다 큰 값의 자식노드를 저장.

 

자바의정석 기초편2 p429

 

class TreeNode {

       TreeNode left;     // 왼쪽 자식노드

       Object element;  // 객체를 저장하기 위한 참조변수

       TreeNode right;   // 오른쪽 자식노드

}

 

 

 

 

4. Map인터페이스

Hashtable은 이전의 것이므로 HashMap 사용 권장.

 

HashMap 

키와 값을 묶어서 하나의 데이터로 저장. 키와 값은 (Object, Object)형태로 저장. 키는 유일, 값은 중복 허용.

많은 양의 데이터를 검색하는 성능↑

 

자바의정석 기초편2 p393

 

'공부일기 > JAVA' 카테고리의 다른 글

JAVA 공부일기2-1  (0) 2023.05.10
JAVA 공부일기1-13  (0) 2023.05.07
JAVA 공부일기1-11  (0) 2023.04.29
JAVA 공부일기1-10  (0) 2023.04.26
JAVA 공부일기1-9  (0) 2023.04.25

댓글