CH15

yeon·2022년 12월 15일
0

이것이자바다

목록 보기
12/15

1. 컬렉션 프레임워크

컬렉션

객체(요소)를 수집해서 저장하는 것

배열의 문제점

저장할 수 있는 객체의 수는 배열 생성 시 결정되어 불특정 다수의 객체 저장하기 어려움
객체 삭제한 경우 해당 인덱스가 비어 객체 저장하려면 어디가 비어있는지 확인한 다음 빈 자리에 넣어야 함

컬렉션 프레임워크

java.util 패키지에 포함되어 객체를 효율적으로 추가, 삭제, 검색할 수 있도록 제공되는 컬렉션 라이브러리이며, 인터페이스를 통해 정형화된 방법으로 다양한 컬렉션 클래스 이용

2. List

특징

인덱스로 관리되어 중복된 객체 저장 가능

구현 클래스

ArrayList, Vector, LinkedList

ArrayList

초기 용량 지정 가능하며 저장 용량 초과한 객체들이 들어오면 자동적으로 확대되며 객체 제거 시에는 삭제되는 객체 뒤의 요소들은 모두 인덱스가 1씩 당겨짐

고정된 객체들로 구성된 List 생성하는 방법

List<T> list = Arrays.asList(T... a);

Vector

스레드 동기화가 되어 있기 때문에 복수의 스레드가 동시에 Vector에 접근해 객체를 추가/삭제하더라도 스레드에 안전함

LinkedList

인접 참조를 링크해서 체인처럼 관리하기 때문에 특정 인덱스에서 객체를 추가/제거하게 되면 바로 앞뒤 링크만 변경하면 되며, 빈번한 객체 삽입, 삭제가 일어날 때 효율적임

3. Set

특징

집합과 유사하며 저장 순서는 유지되지 않고, 객체 중복 저장이 불가능하여 하나의 null만 저장 가능
인덱스로 객체를 검색해서 가져오는 메소드가 없는 대신 전체 객체를 한번씩 반복해서 가져오는 iterator를 제공

구현 클래스

HashSet,LinkedHashSet,TreeSet

HashSet

동일 객체 및 동등 객체는 중복 저장하지 않으며
동등 객체 판단 방법은 hashCode() 리턴값과 비교해 equal()이 true인 경우는 동등 객체, false인 경우는 다른 객체

4. Map

특징

key-value로 구성된 Map.Entry 객체 저장 구조로 키와 값은 모두 객체
키는 중복될 수 없지만 값은 중복 가능함

구현 클래스

HashMap,Hashtable,LinkedHashMap,Properties,TreeMap

HashMap

키 객체는 hashCode(), equals()를 재정의해 동등 객체가 될 조건을 정해야 하며, String 타입의 객체를 주로 사용함

Hashtable

키 객체는 hashCode(), equals()를 재정의하여 동등 객체가 될 조건을 정해야하며, 스레드 동기화가 되어있기 때문에 복수의 스레드가 동시에 hashtable에 접근하여 객체 추가, 삭제하더라도 스레드에 안전함

Properties

키와 값을 String 타입으로 제한한 Map 컬렉션으로 .proterties 파일을 읽어들일 때 주로 사용함

프로퍼티 파일

옵션 / 데이터베이스 연결 / 국제화(다국어) 정보를 기록한 텍스트 파일로, 애플리케이션에서 주로 변경이 잦은 문자열을 저장해 유지 보수 편리하게 만들어줌

5. 검색 기능 강화시킨 컬렉션 (TreeSet, TreeMap)

이진 트리 구조

부모 노드와 자식 노드로 구성되어 왼쪽 자식 노드는 부모보다 작은 값, 오른쪽 자식 노드는 부모보다 큰 값을 가짐
따라서 부모 노드를 기준으로 범위 검색이 쉽고 정렬이 쉬움
오름차순 정렬인 경우 왼쪽노드 > 부모노드 > 오른쪽노드, 내림차순 정렬인 경우 오른쪽노드 > 부모노드 > 왼쪽노드

TreeSet

TreeSet<E> treeSet = new TreeSet<E>();
이진 트리를 기반으로 한 Set Collection으로 왼쪽, 오른쪽 자식 노드를 참조하기 위해 두개의 변수로 구성되어 있음

주요 메소드

특정 객체 찾는 메소드 : first(), last(), lower(), higher(),..
정렬 메소드 : descendingIterator(), descendingSet()
범위 검색 메소드 : headSet(), tailSet(), subSet()

TreeMap

TreeMap<K, V> treeMap = new TreeMap<K, V>();
이진 트리를 기반으로 한 Map Collection으로 키와 값이 저장된 Map.Entry를 저장하며 왼쪽, 오른쪽 노드를 참조하기 위해 두개의 변수로 구성됨

주요 메소드

단일 노드 객체 찾는 메소드 : firstEntry(), lastEntry(), lowerEntry(), higherEntry()
정렬 메소드 : descendingKeySet(), descendingMap()
범위 검색 메소드 : headMap(), tailMap(), subMap()

Comparable, Comparator

TreeSet 객체와 TreeMap 키는 저장과 동시에 자동 오름차순 정렬되며, 그렇기 때문에 저장할 객체의 타입은 Comparable을 구현한 타입의 객체여야 함

사용자 정의 객체를 정렬하고 싶다면

  • 사용자 정의 클래스에 Comparable을 구현해 compareTo(T o)로 비교
  • TreeSet, TreeMap 생성 시에 Comparator 구현 객체를 같이 파라미터로 입력해 compare(T o1, T o2)로 비교

6. LIFO, FIFO

Stack

후입선출(Last In First Out) 구조로 push, peek, pop 등의 메소드로 이용

Queue

선입선출(First In First Out) 구조로 offer, peek, poll 등의 메소드로 이용

7. 동기화된 컬렉션

비동기화된 컬렉션을 동기화된 컬렉션으로 매핑

List

List<T> list = Collections.synchronizedList(new ArrayList<T>());

Set

Set<E> set = Collections.synchronizedList(new HashSet<E>());

Map

Map<K, V> map = Collections.synchronizedMap(new HashMap<K, V>());

profile
🐥

0개의 댓글

관련 채용 정보