본문 바로가기

JAVA

java #9 컬렉션 프레임웍, 컬렉션 클래스, List , Set , Map 인터페이스

1. 컬렉션 프레임웍(collection framework)
1) 컬렉션
- 여러 객체(데이터)를 모아 놓은 것을 의미
2) 프레임 웍
- 표준화, 정형화된 체계적인 프로그래밍 방식 -> 생산성이 올라가고, 유지보수가 쉬워짐
3)컬렉션 프레임웍
- 컬렉션(다수의 객체)을 다루기 위한 표준화된 프로그래밍 방식
- 컬렉션을 쉽고 편리하게 다룰 수 있는 다양한 클래스를 제공
- java.util패키지에 포함. JDK1.2부터 제공

4) 컬렉션 클래스
- 다수의 데이터를 저장할 수 있는 클래스 (예, Vector, ArrayList, HashSet)

5) 컬렉션 프레임웍의 핵심 인터페이스
a. List : 순서가 있는 데이터의 집합, 데이터의 중복을 허용한다. ex) 대기자 명단
   구현 클래스: ArrayList, LinkedList, Stack, Vector 등
b. Set: 순서를 유지하지 않는 데이터의 집합, 데이터의 중복을 허용하지 않는다. <-> List , ex) 양의 정수집합, 소수의 집합
   구현 클래스: HashSet, TreeSet 등
c. Map: 키와 값의 쌍으로 이루어진 데이터의 집합 순서는 유지되지 않으며, 키는 중복을 허용하지 않고, 값은 중복을 허용한다. 예) 우편번호, 지역번호(전화번호) 02 - 서울 , 031 - 경기
   구현 클래스: HashMap, TreeMap , Hashtable , Properties 등

List 인터페이스와 Set 인터페이스의 공통 부분을 뽑아 만든 것: Collection

6) List 인터페이스 - 순서 O ,중복 O (핵심: ArrayList, LinkedList)

메서드 설명
void add(int index, Object element) : 지정된 위치에 객체 또는 컬렉션에 포함된 객체들을 추가
boolean addAll(int index, Collection c) : 지정된 위치에 객체 또는 컬렉션에 포함된 객체들을 추가
Object get (int index) : 지정된 위치(index)에 있는 객체를 반환한다.  (읽기)
Object set (int index, Object element) : 지정된 위치(index)에 객체(element)를 저장한다. (변경)
int indexOf(Object o) : 왼쪽에서부터 오른쪽으로 지정된 객체의 위치를 반환한다. (검색)
int lastindexOf(Object o) : 오른쪽에서부터 왼쪽으로 지정된 객체의 위치를 반환한다. (검색)
Object remove(int index) : 지정된 위치(index)에 있는 객체를 삭제하고 삭제된 객체를 반환한다. (삭제)
void sort(Comparator c) : 지정된 비교자(comparator)로 List를 정렬한다. (정렬)
List subList(int fromindex, int toindex) : 지정된 범위 (from ~ to) 에 있는 객체를 반환한다.

7) Set 인터페이스 - 순서 X ,중복 X
Collection 인터페이스와 동일

집합과 관련된 메서드(Collection에 변화가 있으면 true, 아니면 false를 반환)

메서드  설명
boolean addAll(Collection c) : 지정된 Collection(c)의 객체들을 Collection에 추가한다. (합집합)
boolean containsAll(Collection c) : 지정된 Collection에 포함되어 있는지 확인한다. (부분 집합)
boolean removeAll(Collection c) : 지정된 Collection에 포함된 객체들을 삭제한다. (차집합)
boolean retainAll(Collection c) : 지정된 Collection에 포함된 객체만을 남기고 나머지는 Collection에서 삭제한다. (교집합)

8)Map 인터페이스 - 순서X 중복(키X , 값 O)
메서드 설명
boolean containsKey(Object key) : 지정된 Key객체와 일치하는 Map의 Key객체가 있는 지 확인한다. (검색)
boolean containsValue(Object value) : 지정된 value 객체와 일치하는 Map의 value객체가 있는지 확인한다 (검색)
Object get (Object key) : 지정한 Key객체에 대응하는 value객체를 찾아서 반환한다. (검색)
Object put(Object key, Object value) : Map에 value객체를 key 객체에 연결하여 저장한다. (추가)
void putAll(Map t): 지정된 Map의 모든 key - value쌍을 추가한다. (추가)
Object remove(Object key) : 지정한 key 객체와 일치하는 key-value객체를 삭제한다. (삭제)
Set entrySet() : Map에 저장되어 있는 key - value쌍을 Map.Entry타입의 객체로 저장한 Set으로 반환한다. (읽기) 순서x, 중복x key값과 value값 한 세트로 !
Set keySet() : Map 저장된 모든 key객체를 반환한다. (읽기) key 값만 읽기!
Collection value() : Map에 저장된 모든 value객체를 반환한다. (읽기) value 값만 읽기! (Collection 이므로 List와 Set 성질을 다 갖고 있어서 순서 , 중복 다 되고 다 안됨)

9) ArrayList
- 기존의 Vector를 개선한 것으로 구현원리와 기능적으로 동일
- ArrayList와 달리 Vector는 자체적으로 동기화처리가 되어 있다.
- List 인터페이스를 구현하므로, 저장순서가 유지되고 중복을 허용한다.
- 데이터의 저장공간으로 배열을 사용한다. (배열 기반)

a. ArrayList의 메서드 
-생성자 
ArrayList() - 기본
ArrayList(Collection c) - 컬렉션에 저장할 때
ArrayList(int initialCapacity) - 배열의 길이

-추가
boolean add(Object o) - 성공:true , 실패:false
void add(int index, Object element) - index 저장 위치
boolean addAll(Collection c) - 컬렉션 요소 저장
boolean addAll(int index, Collection c) - 컬렉션 요소 저장 원하는 위치에

-삭제
boolean remove(Object o) - 성공:true , 실패:false
Object remove(int index) - index 저장 위치
boolean removeAll(Collection c) - 컬렉션 객체 삭제
void clear() - 모든 객체 삭제

-검색
int indexOf(Object o) : 못찾으면 -1
int lastindexOf(Object o) : 반대 방향으로
boolean contains(Object o) : 객체가 존재하는지 
Object get(int index) : 객체 읽기
Object set(int index, Object element) : 객체 변경

그 외
Object[] toArray() : ArrayList의 객체배열을 반환.
boolean isEmpty() : 비어있는지
void trimToSize() : 빈 공간 제거
int size() : 저장된 객체의 갯수 반환

주의할 점! 
list1.remove(1); // 인덱스가 1인 객체를 삭제
list1.remove(new Integer(1)); // 1을 삭제

b. ArrayList에 저장된 객체의 삭제과정

원하는 데이터 삭제 -> 그 뒤 배열에 있는 데이터들을 삭제한 데이터 칸 수 만큼 땡겨서 복사 -> 삭제한 데이터 칸 수 만큼 뒤 데이터의 값 null로 변경

10) ArrayList에 저장된 첫 번째 객체부터 삭제하는 경우(배열 복사 발생)
for (int i =0; i<list.size(); i++)
list.remove(i); ...  // 이렇게 삭제하면 데이터 완전히 삭제되지 않고 데이터가 남음

11) ArrayList에 저장된 마지막 객체부터 삭제하는 경우(배열 복사 발생안함) - 빠름
for(int i=list.size()-1; i>=0; i--)
list.remover(i); // 데이터 다 지워짐