컬렉션프레임워크
다수의 객체를 저장이 필요할 때, 배열이 가장 간단하나
배열은 생성시에 객체수가 저장이 되어, 수정 삭제가 번거로워서 컬렉션 프레임워크를 사용한다.
(컬렉션 - 수집해서 저장, 프레임워크 - 사용방법을 미리 정해놓은 라이브러리)
인터페이스 | 특징 | 구현클래스 | |
collection | List | 순서 o, 중복 o | ArrayList, Vector, LinkedList |
Set | 순서 x, 중복 x | HashSet, TreeSet | |
Map | 키와 값의 쌍으로 저장, 키는 중복 저장 x | HashMap, Hashtable, TreeMap, Properties |
List
- 객체를 인덱스로 관리
- 중복저장 시, 동일 번지 참조
- null은 객체 참조 X
- Generic 타입 <E> - 타입파라미터에는 저장할 객체 타입을 저장하면 됨
기능 | 메소드 | description |
추가 | boolean add(E e) | 객체 맨 끝에 추가 |
void add(int index, E element) | 인덱스에 객체 추가 | |
set(int index, E element) | 해당인덱스, 객체변경 | |
검색 | boolean contains(Obect o) | 객체 유무 확인 |
E get(int index) | 해당 인덱스에 저장된 객체 리턴 | |
isEmpty() | 컬렌션이 비었는지 확인 | |
int Size() | 저장된 전체 객체 수 리턴 | |
삭제 | void clear() | 저장된 모든 객체 삭제 |
E remove(int index) | 해당 인덱스 객체 삭제 | |
boolean remove (Object o) | 주어진 객체를 삭제 |
ArrayList
- 자동으로 저장용량(capacity) 증감.
- 객체 추가시 인덱스 0부터 들어감.
- 삭제시 뒤 인덱스가 앞당겨짐.
- 빈번하게 객체 삭제, 삽입시 LinkedList 사용이 빠름 / ArrayList는 인덱스 검색이나 마지막 객체 추가시 유리.
- 생성은 List<E> list = new ArrayList<E>(); 타입파라미터<E> 표기 후, 기본 생성자 호출. 기본 생성자 호출 시, 초기용량은 10으로 들어감. 초기용량 지정하고 싶을 경우, new ArrayList(30); 등 괄호 안에 원하는 크기 설정.
Vector
- ArrayList와 내부 구조와 생성방법 동일. List list<E> = new Vector<E>();
- 차이점 : '동기화' 된 메소드로 구성되어 있어 멀티스레드가 동시에 이 메소드를 실행 불가, 하나 완료 후, 다른 스레드로 넘어감. 그래서 멀티스레드에서 안전(Thread Safe) 함.
LinkedList
- ArrayList와 사용방법, 생성 방법은 동일하나 내부구조는 완전히 다르다. List<E> list = new LinkedList<E>();
- 차이점 : ArrayList는 내부 배열에 객체 저장하고, 인덱스로 관리. LinkedList는 인접 참조링크 로 체인처럼 관리. (삭제시, 해당 객체 연결 링크만 끊기고, 새로 링크되는 형식.)
Set
기능 | 메소드 | description |
추가 | boolean add(E e) | 객체 저장, 성공 시 true 리턴, 실패시 false리턴 |
검색 | boolean contains(Obect o) | 객체 유무 확인 |
isEmpty() | 컬렉션이 비었는지 확인 | |
Iterator<E> iterator() | 저장된 객체 한번씩 가져오는 반복자 리턴 | |
int Size() | 저장된 전체 객체 수 리턴 | |
삭제 | void clear() | 저장된 모든 객체 삭제 |
boolean remove (Object o) | 주어진 객체를 삭제 |
- Set은 인덱스로 객체 검색 불가. 객체 전체를 반복자를 사용하여 검색하여야 한다. *Iterator 인터페이스에 메소드를 활용한다.
리턴타입 | 메소드 | 설명 |
boolean | hasNext() | 가져올 객체 있으면 true, 없으면 false |
E | next() | 컬렉션에서 객체 하나 가져오기 |
void | remove() | Set 컬렉션에서 객체 제거 |
*next전 hasNext로 가져올 객체가 있는지 먼저 확인하는 것이 좋다. hasNext가 true면 next를 활용
HashSet
순서 x, 동일 객체 중복저장 x (같은 인스턴스 의미x, hashCode() 메소드 호출해서 해시코드 얻어 낸 후, 기존 객체들과 비교, 동일한 해시코드 있을 경우 equals() 메소드로 두객체 비교해서 true가 나올 경우 동일 객체로 판단)
TreeSet
- 이진트리(binary tree)를 기반으로한 컬렉션
- 하나의 노드는 노드 값인 value와 왼쪽과 오른쪽 자식 노드를 참조하기 위한 두 개의 변수로 구성
- 객체 저장 시, 자동 정렬 (부모값과 비교해서 낮은 것은 왼쪽, 높은 것은 오른쪽 자식 노드에 저장)
Map
- Map 컬렉션은 '키(key)' 와 '값(value)' 쌍(pari)으로 구성된 Entity 객체를 저장.
- 키와 값 모두 객체이다. (키는 중복저장x, 값은 o) 키로 객체 관리!
- 기존에 저장 된 키와 동일 키로 값 저장 시, 새로운 값으로 대체된다.
기능 | 메소드 | 설명 |
객체 추가 | V put(K key, V value) | 주어진 키와 값을 추가, 저장되면 값을 리턴 |
객체 검색 | boolean containsKey(Object key) | 주어진 키가 있는지 여부 |
boolean containsValue(Object value) | 주어진 값이 있는지 여부 | |
Set<Map.Entry<K,V>> entrySet() | 키와 값의 쌍으로 구성된 모든 Map.Entry 객체를 Set에 담아서 리턴 | |
V get(Object key) | 주어진 키의 값을 리턴 | |
boolean isEmpty() | 컬렉션이 비어 있는지 여부 | |
Set keySet() | 모든 키를 Set 객체에 담아서 리턴 | |
int size() | 저장된 키의 총 수를 리턴 | |
Collection values() | 저장된 모든 값을 Colletcion에 담아서 리턴 | |
객체 삭제 | void clear() | 모든 Map.Entry(키와 값)을 삭제 |
V remove(Object key) | 주어진 키와 일치하는 Map.Entry를 삭제하고 값을 리턴 |
HashMap
- HashMap은 Map 인터페이스를 구현한 대표적인 Map 컬렉션이다.
- HashMap의 키로 사용할 객체는 hashCode() 와 equals() 메소드를 재정의해서 동등 객체가 될 조건을 정해야한다. 동등 객체, 즉 동일한 키가 될 조건은 hashCode() 의 리턴값이 같아야 하고, equals() 메소드가 true를 리턴해야한다.
HashTable
- HashMap과 동일한 내부구조. 키로 사용할 객체는 hashCode() 와 equals() 메소드를 재정의해서 동등객체 조건 정함.
- 차이점 : HashTable은 동기화된 메소드로 구성되어 있어 멀티스레드에서 안전하다.
Properties
- HashTable의 하위 클래스. - 특징 그대로
- 차이점 : 키와 값이 String 타입으로 제한한 컬렉션.
- 주로 애플리케이션의 옵션정보, 데이터베이스의 연결정보, 그리고 국제화(다국어) 정보가 저장된 프로퍼티(.~properties) 파일을 읽을 때 주로 사용
- 프로퍼티 파일을 읽기 위해서는 load() 메소드 호출
TreeMap
- 이진트리(binary tree)를 기반으로한 Map 컬렉션
- 키와 값이 저장된 Map.Entry 객체를 저장 - TreeSet 과 차이점
- 객체 저장 시, 자동 정렬 (부모값과 비교해서 낮은 것은 왼쪽, 높은 것은 오른쪽 자식 노드에 저장)
'코딩 > java' 카테고리의 다른 글
[java] # 17 람다식 (Lambda Expression) (0) | 2023.02.27 |
---|---|
[java] #16-1 TreeMap, TreeSet (0) | 2023.02.26 |
[java] #15 네트워킹 (0) | 2023.02.25 |
[java] #14 스레드/멀티스레드 (0) | 2023.02.24 |
[java] #13 제네릭 (0) | 2023.02.23 |