5. 컬렉션 프레임워크(Collections Framework)
- 컬렉션: 여러 객체(데이터)를 모아놓은 것을 의미
- 프레임워크: 표준화 정형화된 체계적인 프로그래밍 방식
- 컬렉션 프레임워크: 컬렉션을 다루기 위한 표준화된 프로그래밍 방식(java.util 패키지에 포함)
- 컬렉션 클래스: 다수의 데이터를 저장할 수 있는 클래스
1) 컬렉션 프레임워크의 핵심 인터페이스
- List: 순서가 있는 데이터의 집합(중복 허용)
*ArrayList, LinkedList, Stack, Vector 등
- Set: 순서를 유지하지 않는 데이터의 집합(중복 불허)
*HashSet, TreeSet 등
- Map: 키와 값의 쌍으로 이루어진 데이터의 집합(키 중복 허용, 값 중복 불허, 순서미유지)
*HashMap, TreeMap, Hashtable, Properties 등
2) Vector와 ArrayList
- ArrayList는 기존의 Vector를 개선한 것으로 구현 원리와 기능적으로 동일
- ArrayList와 달리 Vector는 자체 동기화 처리
- List 인터페이스를 구현하므로 저장 순서 유지 및 중복 허용
- 배열 기반
3) ArrayList
- 데이터 삭제시 삭제할 데이터 아래의 데이터를 복사해서 덮어쓴 후 size 축소
- 장점: 구조가 간단하고 데이터 접근시간이 짧음
- 단점: 크기 변경 불가(배열 생성 후 복사해야 함), 비순차적인 데이터 추가삭제에 시간 낭비
4) Vector
- 크기: 저장된 객체의 개수
- 용량: 배열의 길이
5) LinkedList
- 배열의 단점을 보완(불연속적 데이터를 연결)
- 데이터 삭제: 참조변경 1회
- 데이터 추가: 객체생성 1회, 참조변경 2회
- 단점: 접근성이 떨어짐
- 더블리 링크드 리스트(doubly linked list): 이중 연결 리스트, 접근성 향상
- 더블리 써큘러 링크드 리스트(doubly circular linked list): 이중 원형 연결리스트
6) 그 외
- 덱(Deque): Stack과 Queue의 결합, 양끝에서 저장(offer) 삭제(poll) 가능
- 우선순위 큐(Priority Queue): 우선순위가 높은 것 부터 꺼냄(null 저장 불가)
- 블락킹 큐(Blocking Queue): 지연(block) 기능(비어있을 때 꺼내기, 가득차 있을 때 넣기)
7) Enumeration, Iterator, ListIterator
- 컬렉션에 저장된 데이터를 접근하는데 사용하는 인터페이스
- Iterator:1회성(재사용 불가), 읽는 도중 변경 불가
- ListIterator: Iterator의 접근성 향상(단방향 -> 양방향)
- boolean hasNext(): 읽어올 요소가 남아있는지 확인(있으면 true)
- Object next(): 다음 요소를 읽어온다(hasNext로 확인하는게 안전)
- void remove(); next()로 읽어온 요소 삭제
8) Arrays
- 배열에 관한 메소드 제공
- toString(): 배열 출력
- deepEquals(), deepToString(): 다차원 배열의 비교와 출력
- copyOf(), copyOfRange(): 배열 복사
- fill(), setAll(): 배열 채우기(람다식)
- asList(Object...a): 배열을 List로 변환
- sort(), binarySearch(): 배열의 정렬과 검색(정렬시에만 사용 가능)
9) Comparator와 Comparable
- 객체 정렬 메소드를 정의한 인터페이스(정렬 기준 제공)
- Comparable: 기본 정렬 기준 구현
- Comparator: 기본 정렬 기준 외 다른 기준으로 정렬시 사용
- compare(), compareTo(): 두 객체의 비교 결과를 반환하도록 작성(=:0 <:- >:+)
10) HashSet
- HashSet: Set인터페이스를 구현(순서를 유지하려면 LinkedHashSet클래스 사용)
- 중복 불허(객체 저장 전 같은 객체가 있는지 확인)
- add(), addAll(): 요소 추가(중복시 false 반환)// equals(), hashCode() 오버라이딩 필수
- hashCode() 오버라이딩 조건: 동일 객체 동일 값 반환, equals true=> 코드값도 동일
11) TreeSet
- 범위 검색과 정렬에 유리한 이진 탐색 트리 구현
- LinkedList와 같이 각 노드가 나무 형태로 연결된 구조
- 모든 노드가 최대 두개의 하위 노드를 가짐
- 이진트리와 달리 이진 탐색 트리는 부모보다 작은값 왼쪽, 큰 값 오른쪽에 저장
- 트리 순회: 이진트리의 모든 노드를 한번씩 읽는 것(전위, 중위, 후위)
12) HashMap
- 해싱 기법으로 데이터 저장(데이터가 많아도 검색이 빠름)
- Map 인터페이스를 구현, 데이터를 키와 값의 쌍으로 저장
- key: 컬렉션 내의 키 중 유일해야 함
- value: 중복 허용
13) TreeMap
- 이진 검색 트리구조로 키와 값의 쌍으로 이루어진 데이터 저장
- 데이터를 정렬해서 저장하기 때문에 저장시간이 길다
- 다수의 데이터에서 개별적인 검색은 HashMap이 더 빠름
- 정렬이나 범위검색이 필요한 경우 TreeMap 사용
14) properties
- 내부적으로 Hashtable을 사용하며 key와 value를 (String, String)로 저장
- 환경설정 관련 속성 저장에 사용
15) Collections
- 컬렉션을 위한 static 메소드 제공
- synchronizedXXX(): 컬렉션의 동기화
- unmodifiableXXX(): 변경불가(readOnly) 컬렉션
- singletonXXX(): 1개만 저장가능한 컬렉션
- checkedXXX(): 한종류 객체 저장 컬렉션
'프로그래밍 > Java' 카테고리의 다른 글
[Java 요약 정리] 7. 열거형(Enums) (0) | 2018.12.26 |
---|---|
[Java 요약 정리] 6. 지네릭스(Generics) (0) | 2018.12.26 |
[Java 요약 정리] 4. 날짜와 시간 (0) | 2018.12.23 |
[Java 요약 정리] 3. java.lang 패키지 (0) | 2018.12.23 |
[Java 요약 정리] 2. 예외 처리(Exception handling) (0) | 2018.12.23 |