반응형

출처 : 이것이 자바다

15.1 컬렉션 프레임워크 소개

필요할 떄마다 꺼내서 사용하는 경우가 많다. 

배열은 쉽게 생성하고 사용할 수 있지만 ,저장할 수 있는 객체 수가 배열을 생성할 때 결정되기 때문에 불특정 다수의 개게를 저장하기에는 문제가 있다. 

배열의 또 다른 문제점은 객체를 삭제했을 떄 해당 인덱스가 비게 되어 낱일이 듬성듬성 빠진 옥수수가 될 수 있다.

 

컬렉션이란 사전적 의미로 요소를 수집해서 저장하는 것 을 말하는데, 자바 컬렉션은 객체를 수집해서 저장하는 역할을 한다.

프레임워크란 사용 방법을 미리 정해 놓은 라이브러리를 말한다.

List, Set, Map =>인터페이스 

ArrayList, Vecotr, LinkedList =>List 인터페이스

HashSet, TreeSet =>set인터페이스

HashMap, Hashtable, TreeMap, Properties =>Map 인터페이스

List와 Set은 객체를 추가, 삭제 , 검색하는 방법에 많은 공통점이 있기 때문에 이 인터페이스들의 공통된 메소드들만 모아 Collection 인터페이스로 정의해 두고 있다.

Map은 키와 값을 하나의 쌍으로 묶어서 관리하는 구조로 되어 있어 , List 및 Set과는 사용방법이 완전히 다르다.

 

15.2 List 컬렉션

객체를 일렬로 늘어놓은 구조를 가지고 있다.

인덱스가 부여되고 인덱스로 객체를 검색, 삭제 할 수 있는 기능을 제공

 

15.2.1 ArrayList

List 인터페이스의 구현 클래스로 , 객체를 추가하면 객체가 인덱스로 관리된다.

일반 배열과 인덱스로 객체를 관리한다는 점에서는 유사하지만, 큰 차이점을 가지고 있다.

배열은 생성할 때 크기가 고정되고 사용 중에 크기를 변경할 수 없지만, ArrayList는 저장 용량을 초과한 객체들이 들어오면 자동적으로 저장용량이 늘어난다는 것이다.

 

15.2.2 Vector

ArrayList와 동일한 내부 구조를 가지고 있다.

List<E> list = new Vector<E>();

 

ArrayList와 다른 점은 Vector는 동기화된 메소드로 구성되어 있기 때문에 

멀티스레드가 동시에 이 메소드들을 실행할 수 없고, 하나의 스레드가 실행을 완료해야만

다른 스레드를 실행할 수 있다.

thread safe : 그래서 멀티 스레드 환경에서 안전하게 객체를 추가, 삭제 가능

 

15.2.3 LinkedList

LinkedList는 List 구현 클래스이므로 ArrayList와 사용방법은 똑같지만 내부 구조는 완전 다르다.

ArrayList 는 내부 배열에 객체를 저장해서 인덱스로 관리

LinkedList 인접 참조를 링크해서 체인처럼 관리한다.

LinkedList에서 특정 인덱스의 객체를 제거하면 앞뒤 링크만 변경되고 나머지 링크는 변경되지 않는다.

 

15.3 Set 컬렉션

객체를 중복해서 저장할 수 없고  , 하나의 null만 저장할 수 있습니다.

HashSet, LinkedHashSet, TreeSet

객체 추가 add()

객체 삭제 remove()

Iterator에서 하나의 객체를 가져올 때 next()메소드

hasNext()메소드는 가져올 객체가 있으면 true를 리턴하고 더 이상 객체가 없으면

false를 리턴한다.

 

15.3.1 HashSet

Set<E> SET = new HashSet<E>();

순서 없이 저장하고 동일한 객체는 중복 저장하지 않는다.

 

HashSet은 객체를 저장하기 전에 먼저 객체의 hashCode() 메소드 호출

equals() 두 객체 비교 

 

15.4 Map 컬렉션

키와 값으로 구성된 Entry 객체를 저장하는 구조를 가지고 있다.

객체 추가 put()

객체 삭제 remove()

키를 알고 있다면 get()

keySet() 

entrySet()

 

15.4.1 HashMap => Map 대표 컬렉션

HashMap 의 키로 사용할 객체는 hashCode()와 equals()메소드를 재정의해서 동등 객체가 될 조건을 

정해야 한다. 

 

15.4.2 

Hashtable 은 HashMap과 동일한 내부 구조를 가지고 있다. 

Hashtable 도 키로 사용할 객체는 hashCode()와 equals()메소드를 재정의 해서 

동등 객체가 될 조건을 정해야 한다.

차이점은 HashTable은 동기화된 메소드로 구성되어 있기 떄문에 멀티 스레드가 동시에 이 

메소드들을 실행할 수 는 없고 , 하나의 스레드가 실행을 완료해야만 다른 스레드를 실행할 

수 있다.

스레드가 안전

 

15.4.3 Properties

Properties는 Hashtable 의 하위 클래스이기 때문에 Hashtabl의 모든 특징을 그대로 가지고 있다.

차이점은 Hashtable 은 키와 값을 다양한 타입으로 지정이 가능한데 비해 

Properties는 키와 값을 String타입으로 제한한 컬렉션이다.

 

15.5 검색 기능을 강화시킨 컬렉션

15.5.1 이진 트리 구조

이진 트리는 여러 개의 노드 가 트리 형태로 연결된 구조로 , 루트 노드 라고 불리는 하나의 노드에서 부터 시작해서 각 노드에 최대 2개의 노드를 연결할 수 있는 구조를 가지고 있다.

 

15.5.2 TreeSet

이진 트리를 기반으로 Set 컬렉션이다. 

하나의 노드는 노드 값인 value와 왼쪽과 오른쪽 자식 노드를 참조가히 위한 두 개의 변수로 구성한다.

 

15.5.3 TreeMap

이진 트리를 기반으로 한 Map 컬렉션이다.

TreeSet,과 차이점은 키와 값이 저장된 Map.Entry를 저장한다는 점이다. 

 

15.5.4 Comparable과 Comparator

Comparable에는 compareTo()메소드가 정의되어 있기 때문에 사용자 정의 클래스에서는 이 메소드를 오버라이딩하여 사용

 

15.6 LIFO와 FIFO컬렉션

후입선출(LIFO) : 은 나중에 넣은 객체가 먼저 빠져나가는 자료구조를 말한다.

선입선출(FIFO) : 은 먼저 넣은 객체가 먼저 빠져나가는 구조를 말한다.

 

15.6.1 Stack

LIFO자료구조를 구현한 클래스이다. 

 

15.6.2 Queue

FIFO자료 구조에서 사용되는 메소드를 정의하고 있다.

 

15.7 동기화된 컬렉션

sysnchronized

Collections.synchronizedList()

 

15.8 병렬 처리르 위한 컬렉션

동기환된 컬렉션은 멀티 스레드 환경에서 하나의 스레드가 요소를 안전하게 처리하도록 도와주지만, 전체 요소를 빠르게 처리하지는 못한다.

 

 

 

반응형

' > 이것이 자바다' 카테고리의 다른 글

17. JavaFX 18. IO 기반 입출력 및 네트워킹  (0) 2020.10.23
16. 스프림과 병렬 처리  (0) 2020.10.17
13. 제네릭 14. 람다식  (0) 2020.10.10
12. 멀티 스레드  (0) 2020.10.03
11. 기본 API 클래스  (0) 2020.10.02

+ Recent posts