반응형

Collections - 컬렉션을 위한 메서드 (static)를 제공

 

Objects 클래스는 객체를 다루는데에 유용한 메서드들을 제공하고,
Arrays 클래스는 배열을 다루는데에 유용한 메서드를 제공한다.
그리고, Collections는 컬렉션을 다루는데 유용한 메서드를 제공한다.

 

1. 컬렉션 채우기, 복사, 정렬, 검색 - fill(), copy(), sort(), binarySearch() 등

 

2. 컬렉션의 동기화 - synchronizedXXX()

sychronized로 시작하는 메서드들이 있는데,

배열기반 컬렉션중에, 옛날버전인 Vector클래스와 비교적 최신버전인 ArrayList가 있는데,
Vector클래스는 동기화 되어있고, ArrayList는 동기화되어있지 않다.(동기화는 13장 쓰레드에서 다룰 예정)
ArrayList는 기본적으로 동기화를 안하도록 되어있는데,
만약, 동기화가 필요하면,
synchronized(List list) 메서드를 사용하면 된다.
항상 동기화하는 것보다, 필요할때만 동기화 하는것이 더 좋은 설계이다.

그래서, 위의 메서드들은 컬렉션을 동기화 할 때 사용하는 메서드들이다.

synchronized(List list) 사용법은,
매개변수에 ArrayList를 넣으면 된다. 그러면 syncList는  동기화된 List가 된다.
동기화된 List는 Vector클래스를 사용하는 것과 똑같은 결괄르 얻게 된다.

 

3. 변경불가 (readOnly) 컬렉션 만들기 - unmodifiableXXX()

unmodifiable로 시작하는 메서드들은, 컬렉션을 수정할 수 없게 만들어준다.
즉, 변경불가하게 만든다. 읽기 전용으로 만드는 것이다.
int i 가 있을 때 final int i를 하면 변수가 아니라 상수가 되는 것처럼 말이다.

 

4. 싱글톤 컬렉션 만들기 - singletonXXX()

싱글톤 컬렉션 이라는 것은, 객체 1개만 저장하는 컬렉션이다.
이름에서 주의할 것은, Set의 경우 singleton 으로 사용한다. (singletonSet이 아니다.

 

5. 한 종류의 객체만 저장하는 컬렉션 만들기 - checkedXXX()

checked로 시작하는 메서드들은, 하나종류의 객체만 저장하는 컬렉션을 만들 때 사용한다.
원래 컬렉션은 여러종류의 객체를 저장할 수 있다.
그런데, checked메서드를 사용하면 해당 컬렉션에는 한가지 타입만 저장 가능하다.

List list = ArrayList(); 를 만들고,
list를 List checkedList = checkedList(list, String.class); 에 넣고 String.class로 타입을 지정해주면, checkedList에는 , String만 저장가능하게 된다. 즉, 1가지 타입만 저장 가능하다.

원래 Collection에는 add(Object obj)라서 모든종류의 객체를 담을 수 있어야 하는데,
checked를 사용하면 지정된 한가지 타입의 객체만 저장할 수 있다.

12장에서 지네릭스를 배우게 되는데, 지네릭스도 한 종류의 객체만 저장하게 만들어준다.
지네릭스는 JDK1.5에 만들어 져셔 그이전에 만들어진 클래스들에는 checked를 사용한 것들이 있다.

 


 

컬렉션 클래스 정리 & 요약

ArrayList, Vector의 특징은, Object[] 배열을 가지고 있고, 여기에 객체를 저장한다.
즉, 배열 기반의 컬렉션 클래스들이다.

이것을 이용해서 만든 것이 Stack이다. Stack은 LIFO구조로 되어있다.
배열의 단점이 추가 삭제가 불리하다는 것인데,

이 단점을 개선한 것이 LinkedList이다. 링크드리스트는 연결기반으로 되어있다.

링크드리스트를 기반으로  Queue를 만들고, 큐는 FIFO구조이다.

그리고, 검색기능을 향상 시킨것이 HashMap 이다. 배열과 링크드리스트를 결합한 것이다.
배열과 링크드리스트를 결합한 구조이이다. 배열의 장점 + 링크드리스트의 장점을 합한 것이다.
Hashtable이라고 부르기도하는데, HashMap의 old버전이다.
key와 value를 쌍으로 저장한다.

TreeMap은 연결기반의 링크드리스트를 이용하여 최대 두개까지 연결할 수 있는 트리구조로 되어있다.
검색과 범위검색, 정렬에 유리하다. 중위순회하면 정렬된 결과를 얻는다.

TreeMap과 HashMap에서 Key부분만 가지고 만든것이 HashSetTreeSet이다.

HashMap의 변형으로 Properties라는 것이 있다.
key와 value를 문자열로만 저장하도록 되어있다. 이것의 장점은, 파일 읽기와 쓰기가 용이하다.

원래 Map과 Set의 특징은 순서를 유지 하지 않는 것인데,
순서를 유지하는 기능이 필요할 수도 있다. 그럴떄에는 LinkedHashMap, LinkedHashSet을 사용하면 된다.

 

반응형

'JAVA' 카테고리의 다른 글

타입 변수  (0) 2022.05.04
지네릭스란?  (0) 2022.05.03
HashMap (2)  (0) 2022.05.03
HashMap (1)  (0) 2022.05.02
TreeSet (2)  (0) 2022.05.02