-
1. 컬렉션 프레임워크
- 자바는 널리 알려 있는 자료구조를 바탕으로 객체들을 효율적으로 다룰 수 있는 인터페이스와 클래스를 미리 util패키지에 포함시켜둠 (이런 것들을 컬렉션 프레임워크라함)
- 컬렉션 프레임워크는 몇 가지 인터페이스를 통해 다양한 컬렉션 클래스를 사용할 수 있도록 설계됨
- 주요 인터페이스는 List,Set,Map이 있다.
- 각 인터페이스로 사용가능한 클래스 종류는 아래와 같다.
- List와 Set는 추가,삭제,검색 방법에 공통점이 있어서 Collection인터페이스를 따로 정의해 두고 상속받는다.
- Map은 키와 값을 쌍으로 묶어서 관리하는 구조이므로, List와 Set가 다름
2. List 컬렉션 (순서유지, 중복저장)
- List는 객체를 인덱스로 관리,인덱스를 통해 검색,삭제 기능을 제공한다.
- List 컬렉션에서 공통적으로 사용가능한 메서드는 다음과 같다.
2.1 ArrayList
- 배열을 통해 객체를 저장하고 다룬다.
- 기존 배열과 차이점은 제한 없이 객체를 추가할 수 있다.
- List 컬렉션은 객체 자체를 저장하는 것이 아니라, 객체의 번지를 저장함 (당연..?)
- ArrayList는 데이터 탐색속도는 빠르지만, 삭제와 삽입(특히 중간 데이터)시 성능이 좀 별로다 이런 경우 사용 지양
2.2 Vector
- Vector은 ArrayList와 동일한 구조를 가지고 있다.
- 차이점은 Vector는 동기화된 메서드로 구성되어 있기 때문에 멀티 스레드가 동시에 vector메서드 실행 불가
- 멀티스레드 환경에서 안전하게 객체를 추가 또는 삭제할 수 있다.
2.3 LinkedList
- 배열이 아닌 node로 구현
- 특정 위치 객체 삽입과 삭제시 성능이 좋다!
3. Set컬렉션
- List는 저장 순서를 유지하지만, Set은 저장 순서가 유지되지 않는다.
- 객체를 중복 저장할 수 없고, 하나의 null만 저장할 수 있다. (집합)
- 입력순서와 출력순서가 다름
*인덱스로 관리,x 인덱스 매개값 메소드 없음
3.1 HashSet
- 가장 많이 사용되는 Set
- HashSet은 저장될 객체의 hashcode값과 equals값을 비교해서 동등객체를 판단한다.
- Set 컬렉션은 인덱스로 객체를 검색하지 않기 때문에 for문을 활용하는 두가지 방법이 있다.
for( E e : set){ } // 이터레이터 활용 Interator<E> iterator = set.iterator();
4. Map 컬렉션
- 키와 값으로 구성된 엔트리 객체를 저장 ( 키는 중복x, 값은 중복 가능)
- HashMap,Hashtable,Properties,TreeMap 등등이 있다.
- 기존 저장된 키와 동일한 키로 값을 저장하면, 기존값 삭제 -> 새로운 값으로 대치
* 키로 객체를 관리하므로, 키를 매개값으로 가지는 메소드가 많다.
* Map에서 키와 값을 출력할때
- Map.keySet() 혹은 Map.entrySet()을 이용할 수 있는데, entrySet()을 이용하면, 더 쉽게 key와 값을 출력할 수 있다.
4.1 HashMap
- 객체의 hashCode()와 equals()메소드를 통해 동일객체인지 검사한다.
4.2 Hashtable
- 동일한 내부구조, 차이점은 동기화된 메서드로 구성되어 있다.
4.3 Properties
- Hashtable에 자식 클래스, Hashtable의 특징 그대로 가지고 있다.
- 키와 값이 String 타입으로 제한됨
- 주로 확장자가 Properties인 프로퍼티 파일 읽을 때 사용함
5. 검색 기능을 강화시킨 컬렉션
- TreeSet과 TreeMap
5.1 TreeSet
- 이진트리 기반 Set컬렉션
- TreeSet에 객체를 저장하면, 자동으로 정렬됨 (객체간 비교 - 우선순위)
- 보통 TreeSet 참조변수를 사용함 (Set이 아닌)
5.2 TreeMap
- 이진 트리를 기반으로 한 Map컬렉션, TreeSet과의 차이점은 객체가 아닌, Entry 저장한다는 점
- 키를 기준으로 정렬된다.
6. Comparable과 Comparator
- TreeSet과 TreeMap에 저장되는 키 객체는 정렬기준이 필요하다.
- 기본정렬기준인 Comparable과 compareTo(T o)메서드를 구현하고 있어야한다.
- Comparable 비구현 객체를 저장하고 싶다면,
- TreeMap이나 TreeSet을 생성할 때 비교자(Comparator)를 제공해주자.
7. Stack와 Queue
8. 동기화된 컬렉션
- 컬렉션 프레임워크의 대부분은 싱글 스레드 환경에서 사용하도록 설계됨
- Vector과 Hashtable는 동기화된 메서드로 구성되어 있지만, ArrayList와 HashSet과 Map등은 아님
- 이런 경우를 대비해서 컬렉션 프레임워크는 비동기를 동기화된 메소드로 래핑하는
synchronizedXXX()메서드를 제공한다.
위 메서드에 매개값으로 비동기화된 컬렉션을 대입하면, 동기화된 컬렉션을 리턴한다.
9. 수정할 수 없는 컬렉션
- 요소를 추가, 삭제할 수 없는 컬렉션을 의미한다.
//of() List<E> immutableList = List.of(E..elements); Set<E> immutableSet = Set.of(E...elements); Map<K,V> immutableMap = Map.of(...); //기존 컬렉션을 수정 불가 컬렉션으로 만들기 copyof() List<E> immutableList = List.copyof(Collection<E> coll); Set<E> immutableSet = Set.copyOf(Collection<E> col;); Map<K,V> immutableMap = Map.copyOf(Map<K,Y> map); //배열로 부터 수정할 수 없는 List 컬렉션 만들기 String[] arr = {"A","B","C"}; List<String> immutableList = Arrays.asList(arr);
'언어 > JAVA' 카테고리의 다른 글
-JavaNextStep (1) - Junit (0) 2023.07.10 컬렉션 예시들 (0) 2023.07.09 어노테이션 (0) 2023.07.08 중첩 선언과 익명 객체 (0) 2023.07.07 상속,동적생성 (0) 2023.07.06