자바의 정석

자바의 정석 11장

그zi운아이 2023. 8. 22. 14:38

이 글은 Java의 정석 3rd Edition을 읽고 정리한 내용입니다.

Chapter 11

컬렉션 프레임웍


1. 컬렉션 프레임웍

컬렉션 플레임웍은 LIST,SET,MAP등을 통해 다수의 데이터를 다루는 데 필요한 다양하고 풍부한 클래스들을 제공해준다.

인터페이스와 다형성을 이용한 객체지향적 설계를 통해 표준화되어 있기 때문에 사용벙르 익히기에도 편리하고 재사용성이 높은 코드를 작성할 수 있다.

 

1.1 컬렉션 프레임웍의 핵심 인터페이스

Collenction 계층도

1. List

순서가 있는 데이터의 집합,데이터의 중복을 허용한다.

구현 클레스 : ArrayList,LinkedList,Stack,Vector 등

메소드 :add() ,get(), indexOf(), listIterator(), remove(), set(), sort(), sibList()

 

2. Set

순서를 유지하지 않는 데이터의 집합. 데이터의 중복을 허용하지 않는다.

구현 클래스 : HashSet,TreeSet 등

 

3. Map

 

key와 value의 쌍으로 이루어진 데이터의 집합 

구현 클래스 : HashMap,TreeMap,Hashtable,Properties 등 

메소드 : clear(), containsKey(), containsValue(), entrySet(),equals(),get(),hashcode(),isEmpty()등

 

3.1 Map.Entry

Map 내부 인터페이스로 Map에 저장되는 key-value 쌍을 다루기 위해 내부적으로 Entry인터페이스를 정의해 둔 클래스

메서드 : euqals() , getkey(), getValue(), hashCode(), setValue()

 

1.2 ArrayList

가장 많이 사용되는 컬렉션 클래스일 것이다.

데이터의 순서가 유지되고 중복을 허용한다는 특징을 갖는다.

기존 Vector를 개선한 것으로 구현원리와 기능적인 측면해서 동일하다.

 

1.3 LinkedList

불연속적인 존재하는 데이터를 서로 연결한 형태로 구성되어 있다.

실제로 LinkedList 클래스는 더블 링크드 리스트로 구현도어 있다. 이로 링크드 리스트의 단점인 낮은 접근성을 보완해준다.

 

1.4 Stack과 Quere

Stack  : 마지막에 저장한 데이터를 가장 먼저 꺼내게 되는 LIFO구조로 되어있다,

Queue : 처음에 저장한 데이터를 가장 먼저 꺼재게 되는 FIFO구조로 되어있다.

책에서 Queue 는 ArrayList보다 LinkedList로의 구현이 더 적합나다고 나오는데 LinkedList는 메모리 사용량이 크다는 단점이 있는데 ArrayDeque는 이러한 단점도 없음으로 ArrayDeque가 더 적합하하고 생각된다.

 

PriorityQueue

Queue인터페이스의 구현체 중의 하나로 저장한 순서에 관계없이 우선순위가 높은 것부터 꺼내는 Queue다 Heap 자료 구조를 이용해 구현되어 있다.

Deque

Queue 의 변형으로, 한 쪽 끝으로만 추가/삭제할 수 있는 Queue 와 달리 ,Deque은 양쪽 끝에 추가/삭제가 가능하다.

 

1.5  Iterator ,Listiterator, Enumeration

Iterator

컬렉션에 저장된 요소들을 읽어오는 방법을 표준화하였다 . 

컬렉션 클래스에 대해 iterator()를 호출하여 Iterator를 얻은 다음 반복문, 주로 while문을 사용해서 컬렉션 클래스의 요소들을 읽어 올 수 있다.

 

 Enumeration

컬렉션 프레임웍이 만들어 지기 이전에 사용되던 것으로 Iterrator의 구버전

ListIterator

Iterator를 상속받아서 기능을 추가한 것으로, 컬렉션의 요서에 접근할 때 양방향으로의 이동이 가능하게 해준 것

List인터페이스를 구현한 컬렉션에서만 사용가능하다.

 

1.6 Arrays

배열을 다루는데 유용한 메서드가 정의된 클래스

 

copyOf : 배열의 복사

fill() : 배열 채우기

sort() : 배열의 정렬

binarySearch() : 배열의 검색 

equals() : 배열의 비고 

toString() : 배열의 출력 

 

1.8 HashSet 

Set인터페이스를 구현한 가장 대표적인 컬렉션이다. 

저장순서를 유지하고자 한다면 LinkedHashSet을 사용하면 된다.

1.9 TreeSet

인진 검색 트리 자료구조의 형태로 데이터를 저장하는 컬렉션 클래스이다.

Treeset은 Red-Black tree로 구현되어 있다.

 

1.10 HashMap과 Hashtable

Hashtable은 HashMap의 구버전이다.

HashMap은 해싱을 사용하기 때문에 많은 양의 데이터를 검색하는데 있어 뛰어난 성능을 보인다.

 

해싱 : 해싱함수를 이용하여 데이터를 해시테이블에 저장하고 검색하는 기법

 

1.11 TreeMap

이진검색트리 형태로 키와 값의 쌍으로 이루어진 데이터를 저장한다

범위검색이나 정렬이 필요한 경우는 TreeMap의 효능이 좋지만 그외는 HashMap의 성능이 더 뛰어나다.

 

1.12  Properties 

Hashtable을 상속받아 구현한 것으로 String,String으로 저장하는 단순화된 컬렉션클래스이다.

주로 애플리케이션의 환경설정과 관련된 속성을 저장하는데 사용되며 주로 파일로부터 읽고 쓰는 편리한 기능을 제공한다.