JAVA

Collection Framework

superbono 2021. 7. 5. 18:17

* 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

 

Map Collection

* Map? 키(key)와 값(value)로 구성된 entity 객체를 저장하는 구조를 가지고 있다. 키/값 둘 다 모두 객체이다. 키는 중복 저장될 수 없지만 값은 중복 저장될 수 있다. 만약 기존에 저장된 키와 동일한

superbono-2020.tistory.com

 

'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