- 컬렉션 프레임 워크에는 대표적으로 3개의 인터페이스가 정의되어 있다.
1. List
2. Set
3. Map
- List와 Set 인터페이스는 조상 클래스로 Collention 인터페이스를 가지고 있다.
1. List
List 인터페이스는 1) 순서가 있고, 2) 데이터의 중복을 허용한다.
- 구현 클래스에는
1) ArrayList
2) LinkedList
3) Stack
등 여러가지 클래스가 있다.
2. Set
Set 인터페이스는 1) 순서를 유지하지 않고, 2) 데이터의 중복을 허용하지 않는다.
- 구현 클래스에는
1) HashSet
2) TreeSet
등 여러가지 클래스가 있다.
3. Map
Map 인터페이스는 1) 키(Key)와 값(Value)의 쌍(pair)으로 이루어진 데이터의 집합이다.
순서는 유지되지 않으며, 키는 중복을 허용하지 않고, 값은 중복을 허용한다.
- 구현 클래스에는
1) HashMap
2) TreeMap
3) Hashtable
4) Properties
등 여러가지 클래스가 있다.
1. ArrayList
2. LinkedList
1. ArrayList
- ArrayList는 Object배열을 이용해서 데이터를 순차적으로 저장한다.
- ArrayList의 요소를 앞에서부터 삭제하게 되면 삭제 뒤 빈자리를 뒤의 요소들이 채우기 때문에 반복문을 이용해서 삭제할 때는 구성 요소의 '가장 마지막'부터 삭제하는 것이 좋다.
2. LinkedList
- 배열은 데이터를 읽어오는데 가장 빠르다는 장점이 있지만, 1) 크기를 변경할 수 없다. 2) 비순차적인 데이터의 추가 또는 삭제에 시간이 많이 걸린다. 라는 단점이 있다. 이를 보완하기 위해 LinkedList가 고안되었다.
- LinkedList는 불연속적으로 존재하는 데이터를 서로 연결(link)한 형태로 구성되어 있다.
- LinkedList의 각 요소들은 자신과 연결된 다음 요소에 대한 참조(주소값)와 데이터로 구성되어 있다.
- ArrayList와 다르게 요소를 삭제해도 다음 요소를 가르키는 참조값을 변경하면 되기 때문에 데이터 이동을 위해 복사하는 과정이 필요 없다.
1. Stack
2. Queue
1. Stack
- Stack은 마지막에 저장한 데이터를 가장 먼저 꺼내게 되는 LIFO(Last In First Out)구조로 되어 있다.
- ArrayList과 같은 배열기반의 컬렉션 클래스가 적합하다.
- Stack의 경우 클래스에 해당한다.
2. Queue
- Queue는 처음에 저장한 데이터를 가장 먼저 꺼내게 되는 FIFO(First In First Out)구조로 되어 있다.
- ArrayList보다 LinkedList같은 클래스가 적합하다.
- Queue의 경우 인터페이스에 해당하기 때문에 Queue인터페이스를 구현한 클래스들을 사용하여 객체를 생성해야 한다.
1. Iterator
2. ListIterator
3. Enumeration
1. Iterator
- 컬렉션에 저장된 요소들을 읽어오는 방법을 Iterator인터페이스로 정의하였다.
- Iterator를 반환하는 iterator()를 정의하고 있다.
Collection c = new ArrayList();
Iterator it = c.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
- 위는 Iterator의 기본적인 사용법이다.
- 컬렉션 클래스에 대해 iterator()를 호출하여 Iterator를 얻은 다음 반복문, 주로 while문을 사용해서 컬렉션 클래스의 요소들을 읽어 올 수 있다.
- boolean hasNext() : 읽어 올 요소가 남아있는지 확인한다. 있으면 true, 없으면 false를 반환한다.
- Object next() : 다음 요소를 읽어 온다. next()를 호출하기 전에 hasNext()를 호출해서 읽어 올 요소가 있는지 확인하는 것이 안전하다.
- void remove() : next()로 읽어 온 요소를 삭제한다. next()를 호출한 다음에 remove()를 호출해야 한다.
'Programming > JAVA' 카테고리의 다른 글
JAVA - Optional (0) | 2023.06.05 |
---|---|
JAVA - Reflection API (0) | 2023.06.01 |
JAVA - 람다 (기본) (0) | 2023.05.18 |
JAVA - Reflection (1) | 2023.05.14 |
JAVA - Class 클래스 (0) | 2023.05.14 |