Programming/JAVA

JAVA - 컬렉션 프레임 워크 (Collections Framework), List, Set, Map ... (1) 그 중 List

잇(IT) 2023. 5. 18. 01:30

- 컬렉션 프레임 워크에는 대표적으로 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()를 호출해야 한다.

728x90

'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