* Collection Framework?
객체들을 효율적으로 추가, 삭제. 검색할 수 있도록 java.util 패키지에 컬렉션과 관련된 인터페이스와 클래스들을 포함시켜놓은 것. 몇 가지 인터페이스를 통해서 다양한 컬렉션 클래스를 이용할 수 있도록 하고 있다. 컬렉션 프레임워크의 주요 인터페이스로는 List, Set, Map 등이 있다.
List, Set은 객체를 추가, 삭제, 검색하는 방법에 많은 공통점이 있기 때문에 이 인터페이스들의 공통된 메소드들만 모아 Collection 인터페이스로 정의해 두고 있다. Map은 키와 값을 하나의 쌍으로 묶어서 관리하는 구조로 되어 있어서, List 및 Set과는 사용 방법이 관전히 다르다.
인터페이스 분류 | 특징 | 구현 클래스 | |||
Collection | List | - 순서를 유지하고 저장 - 중복 저장 가능 |
ArrayList, Vector LinkedList |
||
Set | - 순서를 유지하지 않고 저장 - 중복 저장 안됨 |
HashSet, TreeSet | |||
Map | - 키와 값의 쌍으로 저장 - 키는 중복 저장 안됨 |
HashMap, Hashtable, TreeMap, Properties |
* List?
객체를 일렬로 늘어놓은 구조를 가지고 있다. 객체를 인덱스를 통해 관리하기 때문에 객체를 저장하면 자동으로 인덱스가 부여되고 인덱스로 객체를 검색, 삭제할 수 있는 기능을 제공한다. List 컬렉션은 객체 자체를 저장하는 것이 아니라 객체의 번지를 참조한다. 동일한 객체를 중복 저장할 수 있다. null도 저장이 가능한데 이 경우 해당 인덱스는 객체를 참조하지 않는다.
- ArrayList
- Vector
ArrayList와 Vector는 동일한 내부구조를 가지고 있다. 차이점은 Vector는 동기화된(synchrozied) 메소드로 구성되어 있기 때문에 멀티 스레드가 동시에 이 메소드들을 동시에 실행할 수 없고, 하나의 스레드가 실행을 완료해야만 다른 스레드가 실행될 수 있다. 따라서 멀티 스레드 환경에서 안전하게 객체를 추가, 삭제할 수 있다. -> Thread Safe!
- LinkedList
끝에서부터(순차적으로) 추가/삭제하는 경우는 ArrayList가 빠르지만, 중간에 추가 또는 삭제할 경우는 앞뒤 링크 정보만 변경하면 되는 LinkedList가 더 빠르다.
구분 | 순차적으로 추가/삭제 | 중간에 추가/삭제 | 검색 |
ArrayList | 빠르다 | 느리다 | 빠르다 |
LinkedList | 느리다 | 빠르다 | 느리다 |
* Set?
List 컬렉션은 저장 순서를 유지하지만, Set 컬렉션은 저장 순서가 유지되지 않는다. 객체를 중복해서 저장할 수 없고 하나의 null 만 저장할 수 있다.
- HashSet
- LinkedHashSet
- TreeSet
기능 | 메소드 | 설명 |
객체 추가 | boolean add(E e) | 주어진 객체를 저장, 객체가 성공적으로 저장되면 true를 리턴하고 중복 개체면 false를 리턴 |
객체 검색 | boolean contains(Object o) | 주어진 객체가 있는지 여부 |
boolean isEmpty() | 컬렉션이 비어있는지 여부 | |
iterator<E> iterator() | 저장된 객체를 한번씩 가져오는 반복자 리턴 | |
int size() | 저장되어 있는 객체 수 리턴 | |
객체 삭제 | void clear() | 저장된 모든 객체를 삭제 |
boolean remove(Object o) | 주어진 객체를 삭제 |
Set인터페이스가 제네릭 타입이기 때문에 구체적인 타입은 구현 객체를 생성할 때 결정된다. Set 컬렉션은 인덱스로 객체를 검색해서 가져오는 메소드가 없다. 전체 객체를 대상으로 한번씩 반복해서 가져오는 반복자(iterator)를 제공한다. iterator() 메소드를 호출하면 얻을 수 있다.
- iterator 인터페이스에 선언된 메소드들
리턴 타입 | 메소드명 | 설명 |
boolean | hasNext(0 | 가져올 객체가 있으면 true를 리턴하고 없으면 false를 리턴한다. |
E | next() | 컬렉션에서 하나의 객체를 가져온다. |
void | remove() | set 컬렉션에서 객체를 제거한다. |
* Map?
Map에 대해서는 따로 포스팅을 하였다.
https://superbono-2020.tistory.com/142
'JAVA' 카테고리의 다른 글
Static (0) | 2021.07.21 |
---|---|
Map Collection (0) | 2021.07.08 |
Interface(인터페이스) (0) | 2021.06.30 |
String과 StringBuilder 비교하기 (String vs StringBuilder) (0) | 2021.06.21 |
메모리 구조(Stack, Heap) (0) | 2021.06.20 |