Collection_desc
제네릭(Generic)
- jdk1.5에서 추가된 문법으로 상당수의 객체에서 사용하고 있는 개념
- 제네릭을 사용하면 사용하고자 하는 자료형을 클래스에서 미리 지정하지 않고, 인스턴스 생성시 원하는 자료형을 지정할 수 있습니다.
컬렉션 프레임워크(Collection Framework)
- 여러 데이터를 모아 놓은 데이터 그룹에 대한 클래스들을 프로그래밍하는 표준화된 방법
- 컬렉션(List, Set)과 맵(Map)이 속한다.
- jdk1.2 이전까지는 Vector, Hashtable, Properties 등의 클래스를 이용하여 작업하였으나 jdk1.2에서부터 표준화된 컬렉션 프레임워크를 사용하게 되었습니다.
- 컬렉션 프레임워크는 기본적으로 Object형 데이터를 저장하는 클래스입니다.
(제네릭을 지정하지 않으면 Object로 저장되며, 데이터를 사용할 때에도 Object형으로써 사용해야합니다.)
(Object클래스의 메소드나 오버라이딩된 메소드만 사용가능합니다.)
제네릭을 지정하면 뽑아온 데이터가 Object형이라도 원하는 자료형으로 형변환 없이 인스턴스를 생성하여 사용할 수 있습니다.
- 컬렉션 프레임워크에는 List, Set, Map의 세가지 인터페이스가 있습니다.(클래스가 아닌 인터페이스)
이중에서 List와 Set은 Collection인터페이스를 상속받았습니다.
List : 순서가 있는 데이터 집합으로 데이터의 중복이 허용됩니다.
- 구현 클래스 : ArrayList, LinkedList, Stack, Vector 등
Set : 순서가 없는 데이터 집합으로 중복을 허용하지 않는다.
- 구현 클래스 : HashSet, TreeSet 등
Map : 순서가 없는 데이터 집합으로 키(key)와 값(value)의 쌍(pair)으로 이루어져 있습니다.
- 키(key)는 중복을 허용하지 않고, 값은 중복을 허용합니다.
- 구현 클래스 : HashMap, TreeMap, Hashtable, Properties 등
Collection<E> 인터페이스
- List와 Set의 상위인터페이스로 컬렉션의 기본적인 기능들을 모아놓은 인터페이스
- 제네릭으로 저장할 데이터의 자료형을 지정할 수 있으며, 생략시 Object로 설정됩니다.
- 주요 메소드
리턴 메소드명 및 설명
boolean add(E e) : 지정한 데이터(객체 : e)를 추가
boolean addAll(Collection<? extends E> c) : 지정한 컬렉션을 추가합니다.(제네릭 지정시 E와 관련된 데이터를 가진 컬렉션만 가능)
void clear() : 컬렉션의 모든 데이터를 삭제
boolean contains(Object o) : 컬렉션에 지정한 객체(o)가 존재하는지 여부
boolean containsAll(Collection<?> c) : 지정한 컬렉션(c)이 존재하는지 여부
boolean equals(Object o) : 동일한 컬렉션인지 여부
boolean isEmpty() : 컬렉션이 비어있는지 여부
Iterator<E> iterator() : 컬렉션의 iterator를 리턴
boolean remove(Object o) : 지정된 객체(o)를 삭제
boolean removeAll(Collection<?> c) : 지정된 컬렉션(c)을 삭제
boolean retainAll(Collection<?> c) : 지정된 컬렉션(c)에 포함된 객체들만 남기고, 나머지 객체들은 삭제(삭제가 되었다면 true, 아니면 false를 리턴)
int size() : 컬렉션에 저장된 객체의 개수를 리턴
Object[] toArray() : 컬렉션을 Object배열로 리턴
<T> T[] toArray(T[] a) : 제네릭으로 지정된 <T>형 배열(a)에 컬렉션의 데이터를 담아 리턴
List<E> 인터페이스
- Collection인터페이스를 상속받은 인터페이스로 Collection인터페이스의 메소드들을 자유롭게 사용할 수 있습니다.
public interface List<E> extends Collection<E>
- 순서가 있는(저장순서를 유지) 컬렉션으로 데이터의 중복을 허용합니다.
- 주요 메소드 : Collection인터페이스에서 상속받은 메소드는 제외
리턴 메소드명 및 설명
void add(int index, E element) : 지정된 위치(index)에 객체(element)를 추가
boolean addAll(int index, Collection<? extends E> c) : 지정된 위치(index)에 컬렉션(c)에 포함된 객체들을 추가
E get(int index) : 지정된 위치(index)의 데이터를 리턴
int indexOf(Object o) : 지정한 객체(o) 위치를 찾아 인덱스를 리턴(못 찾으면 -1을 리턴)
int lastIndexOf(Object o) : 지정한 객체(o)의 위치를 뒤에서부터 찾아 인덱스를 리턴(못 찾으면 -1을 리턴)
ListIterator<E>listIterator() : : ListInterator를 리턴(List 전용)
E remove(int index) : 지정된 위치(index)의 객체를 삭제 후, 삭제된 객체 리턴
E set(int index, E element) : 지정된 위치(index)에 객체(element)를 저장 - 기존의 객체는 삭제됨
List<E> subList(int fromIndex, int toIndex) : 컬렉션에서 fromIndex부터 toIndex - 1까지 잘라내어 List로 리턴
ArrayList<> 클래스
- 배열과 가장 비슷한 컬렉션으로 기존의 Vector를 개선한 클래스
- 가장 많이 사용되는 컬렉션으로 Object형 객체들을 저장하는 컬렉션
- 생성자
ArrayList() : 크기가 0인 ArrayList를 생성
ArrayList(collection<? extends E> c) : 지정된 컬렉션(c)를 기반으로 ArrayList를 생성
ArrayList(int initialCapacity) : initialCapacity를 초기용량으로 하는 ArrayList를 생성
- 주요 메소드 : Collection과 List 인터페이스에서 상속받은 메소드는 제외
리턴 메소드 및 설명
void ensurecapacity(int minCapacity) : ArrayList의 용량을 최소한 minCapacity만큼 유지하도록 함
void removeRange(int fromIndex, int toIndex) : formIndex부터 toIndex - 1까지 삭제
void trimToSize() : ArrayList의 빈 공간을 삭제
LinkedList<E> 클래스
- 사용하는 데이터의 개수가 자주 변경되는 경우 ArrayList보다 효율적인 동작을 합니다.
단, 데이터의 개수가 많으면 접근시간이 오래 걸립니다.
- 생성자
LinkedList() : LinkedList 생성
LinkedList(Collection<? extends E> c) : 지정된 컬렉션(c)를 기반으로 LinkedList를 생성
- 주요 메소드 : Collection과 List 인터페이스에서 상속받은 메소드는 제외
리턴 메소드명 및 설명
void addFirst(E e) : 지정된 객체(e)를 List의 첫번째 요소로 추가
void addLast(E e) : 지정된 객체(e)를 List의 마지막 요소로 추가
Iterator<E> descendingInterator() : 역순으로 조회하는 iterator리턴
E element() : List의 첫번째 요소 리턴
E getFirst() : List의 첫번째 요소 리턴
E getLast() : List의 마지막 요소 리턴
boolean offer(E e) : 지정된 객체(e)를 List의 마지막 요소로 추가
boolean offerFirst(E e) : 지정된 객체(e)를 List의 첫번째 요소로 추가
boolean offerLast(E e) : 지정된 객체(e)를 List의 마지막 요소로 추가
E peek() : List의 첫번째 요소를 리턴
E peekFirst() : List의 첫번째 요소를 리턴
E peekLast() : List의 마지막 요소를 리턴
E poll() : List의 첫번째 요소를 리턴(List에서는 삭제됨)
E pollFirst() : List의 첫번째 요소를 리턴(List에서는 삭제됨)
E pollLast() : List의 마지막 요소를 리턴(List에서는 삭제됨)
E pop() : removeFirst()와 동일
void push(E e) : addFirst()와 동일
Queue<E> 인터페이스
- 저장하는 순서대로 출력되는 클래스
FIFO(First In First Out) 또는 LILO(Last In Last Out)
- 보통 Queue인터페이스를 implements한 LinkedList를 사용해서 인스턴스 생성
Stack<E> 클래스
- 저장한 순서와 반대로 출력되는 클래스
FILO(First in Last Out) 또는 LIFO(Last In First Out)
- 생성자
Stack() : 빈 스택 인스턴스 생성
- 주요 메소드
리턴 메소드명 및 설명
boolean empty() : 현재 스택이 비었는지 여부
E peek() : 스택의 가장 위에 있는 데이터 리턴
E pop() : 스택의 가장 위에 있는 데이터 리턴(스택에서는 삭제)
E push(E item) : 스택에 객체를 저장
int search(Object o) : 스택에서 객체(o)의 위치를 찾아 리턴(못 찾으면 -1을 리턴하고, 위치값이 인덱스가 아니므로 1부터 시작)
Iterator<E> 인터페이스
- 컬렉션에 저장된 요소들을 읽어오는 방법의 표준화
- 인터페이스이므로 Collection의 iterator()메소드를 통해 작업합니다.
- 한 방향으로만 동작하는 단점이 있습니다.(next만 가능 previous 불가능)
- 주요 메소드
리턴 메소드명 및 설명
boolean hasNext() : 읽어 올 요소가 남았는지 여부
E next() : 다음 요소를 읽어들임
void remove() : next()로 읽어 온 요소를 삭제. next() 다음에 사용해야 함
Enumeration<E> 인터페이스
- Iterator의 예전 버전 인터페이스로 예전 소스와의 호환성 문제로 남아있는 기능
- 주요 메소드
리턴 메소드명 및 설명
boolean hasMoreElements() : 읽어 올 요소가 남아 있는지 여부
E nextElement() : 다음 요소를 읽어드림
ListIterator<E> 인터페이스
- Iterator를 상속받아 기능을 추가한 것으로 양방향으로 동작이 가능합니다. next와 previous 모두 가능하며
List에서만 사용가능합니다.
- 주요 메소드
리턴 메소드명 및 설명
boolean hasNext() : 읽어 올 다음 요소가 남았는지 여부
boolean hasPrevious() : 읽어 올 이전 요소가 남았는지 여부
E next() : 다음 요소를 읽어들임
int nextIndex() : 다음 요소의 인덱스를 리턴
E previous() : 이전 요소를 읽어드림
int previousIndex() : 이전 요소의 인덱스를 리턴
void remove() : next()로 읽어 온 요소를 삭제. next() 다음에 사용해야 함
Arrays 클래스
- 배열을 다루는 데 유용한 메소드들을 제공하는 클래스로 생성자 없이 모든 메소드가 static으로 선언되어 있습니다.
- 주요 메소드
리턴 메소드명 및 설명
int binarySearch(검색대상배열[] a, 검색객체) : 검색대상 배열에서 검색객체를 검색하는 메소드로 이분법을 이용 단, 이분법의 특성상 반드시 검색대상 배열은 오름차순으로 정렬이 되어있어야 함.
복사문자열 copyOf(원본배열, int 복사할 요소 갯수) : 원본배열의 처음부터 지정한 갯수만큼 복사하여 다른 배열로 생성
복사본배열 copOfRange(원본배열, int from, int to) : 원본배열의 from부터 to - 1까지 복사하여 다른 배열로 생성
boolean equals(배열1, 배열2) : 배열1과 배열2의 모든 데이터가 동일한지 여부를 리턴(1차원 배열에서만 사용가능)
boolean deepEquals(배열1, 배열2) : equals()와 같으면 다차원 배열에서 사용
void fill(배열, 채울 값) : 배열의 각 요소에 지정할 값을 채움
void sort(배열) : 배열의 각 요소들을 오름차순으로 정렬시킴
String toString(배열) : 배열의 각 요소들의 값들을 문자열로 리턴
String deepToString(배열) : toString() 같으나 다차원 배열용
'Java > 본격 Java 컬렉션' 카테고리의 다른 글
[Java] ArrayList에서 순서바꾸기( + Bubble Sort) (0) | 2020.07.13 |
---|---|
[Java] ArrayList 사용해보기 (0) | 2020.07.13 |
[Java] Arrays (0) | 2020.07.03 |
[Java] Iterator<E> (0) | 2020.07.03 |
[Java] Stack - Queue (0) | 2020.07.03 |