[자바] 자바 컬렉션 프레임워크

Java

2020. 11. 23.

자바 컬렉션 : 객체를 수집해서 저장하는 역할.

프레임워크 : 사용방법이 정해져있는 라이브러리.

 

자바 컬렉션 프레임워크와 배열의 차이

배열은 크기가 미리 결정되어야 하며 기본형, 참조형 둘 다 저장 가능하지만, 다양한 기능(메서드)을 사용할 수 없다.

이런 배열이 불편하기 때문에 자바는 크기가 가변적이며 참조형 자료만 저장할 수 있는 컬렉션 프레임워크를 제공한다.

 

List<<interface>> : 순서를 유지하여, 중복 저장 가능. 값만 저장한다.

Set<<interface>> : 순서를 유지하지 않아 중복 저장 불가능. 검색할 때 Iterator 사용한다. 값만 저장한다.

Map<<interface>> : 키와 값을 저장한다. 값은 중복될 수 있지만 키가 중복되면 안된다. 키를 중복시키면 이전 자료는 없어지고 새 객체가 덮어씌워진다.

List와 Set은 값만 저장한다는 공통점이 있어 Collection<<interface>>로 묶어놨다.

 

▶ Collection 계열 : 값만 저장한다.

add(Object) 메소드로 Collection 계열 구조에 자료를 저장할 수 있다.

객체 안의 Object 영역만 참조를 하게 된다.

size( ) 저장되어있는 자료의 갯수를 반환한다.

 

▷ List 구현 클래스 : 배열과 아주 유사하게 생겼으며 자료 저장시 index가 제공된다.

그래서 자료가 순차적으로 저장되고, 중복 저장이 가능하다.

get(int) 인덱스 값을 받아서 그에 해당하는 자료를 찾아서 반환한다.

remove( ) 인덱스(방) 하나가 사라진다.

1) ArrayList : 인덱스로 객체를 관리. 배열과 달리 저장 용량이 저절로 늘어난다.

2) Vector : ArrayList와 완전히 동일한 내부 구조를 가졌지만, 모든 메서드가 syncronized 메서드라 Thread safe하다.

3) LinkedList : 둘과 내부 구조가 완전히 다르다. 각 요소가 다음, 또는 이전 요소의 위치 포인터를 갖고 있다.

 

 Set 구현 클래스 : index가 없어서 자료가 마구 뒤섞인다. 보통 주머니로 표현한다.

그래서 순차 저장, 중복 저장이 불가능하다. 저장된 객체를 하나하나 꺼내보면서 찾아야한다.

Iterator( ) 요소를 하나하나 방문해서 검색한다.

Remove( ) 해당 자료를 제거한다.

(Hash라는 접두어는 해시코드값으로 검색한다는 뜻이고 Tree는 정렬한다는 뜻)

1) HashSet : 객체를 순서 없이 저장하고 동일한 객체는 중복 저장하지 않는다.

여기서 동일한 객체를 찾아낼 때, hashCode() 메소드를 호출해서 객체의 해시코드를 가져와 비교한 후, 같으면 equals() 메소드를 호출해 값이 true()이면 저장하지 않는다.

이 해시코드 값으로 저장된 값을 검색한다.

2) TreeSet : 기본적으로 오름차순으로 데이터를 정렬시켜준다.

 

▶ Map 계열 : 키와 값을 저장한다. 값은 중복될 수 있지만 키가 중복되면 안된다. 키를 중복시키면 이전 자료는 없어지고 새 객체가 덮어씌워진다.

put(Object key, Object value) 키와 값을 저장하는 메소드.

size( ) 저장되어있는 자료의 갯수를 반환한다.

get(Object key) 키에 해당하는 value를 반환한다. 반환되는 타입은 Object.

remove(Object key) 키에 해당하는 value를 제거한다.

         └ Hashtable : 스레드 동기화 구조라 자료를 추가, 삭제할 때 마다 스레드 동기화를 한다.
                             그래서 처리 속도가 HashMap에 비해 느리다.
         └ Properties : key와 value가 모두 문자열로 저장되어야한다.
         └ HashMap : 스레드 동기화 안 돼서 처리 속도가 Hashtable 에 비해 빠르다.
         └ TreeMap : key 순서대로 값을 정렬해준다.