자바 컬렉션 : 객체를 수집해서 저장하는 역할.
프레임워크 : 사용방법이 정해져있는 라이브러리.
자바 컬렉션 프레임워크와 배열의 차이
배열은 크기가 미리 결정되어야 하며 기본형, 참조형 둘 다 저장 가능하지만, 다양한 기능(메서드)을 사용할 수 없다.
이런 배열이 불편하기 때문에 자바는 크기가 가변적이며 참조형 자료만 저장할 수 있는 컬렉션 프레임워크를 제공한다.
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 순서대로 값을 정렬해준다.
'old > Java' 카테고리의 다른 글
[링크스크랩] 자바 스트림 (Java Stream) (0) | 2023.01.24 |
---|---|
[링크스크랩] 자바 옵셔널 (Java Optional) (0) | 2023.01.24 |
[자바] 멀티 스레드 ③ 스레드 우선순위 (0) | 2020.11.23 |
[자바] 멀티 스레드 ② 스레드의 이름 (0) | 2020.11.23 |
[자바] 멀티 스레드 ① 작업 스레드 생성하고 실행하기 (0) | 2020.11.23 |