개발 지식/Java
컬렉션 프레임워크 (List, Set, Map)
윤씅
2024. 8. 10. 01:05
⦁ java. util 패키지에 포함되어 있다.
⦁ 제네릭 타입이다.
⦁ 인터페이스 List, Set, Map은 각각 다음의 클래스들을 가지고 있다.
⦁ List : ArrayList, Vector, LinkedList
⦁ Set : HashSet, TreeSet
⦁ Map : HashMap, Hashtable, TreeMap, Properties
여러 메소드를 사용하기 위해선 인터페이스를 공부하면 된다.
∎ List 컬렉션, 인터페이스
- 객체의 번지가 저장된다. index를 통해 접근
- 기본 타입은 boxing되어 번지가 저장된다.
< ArrayList >
⦁ 사용시작
- 원하는 타입이 있다면 : List< E> list = new ArrayList<>();
- 여러 타입을 저장할 때 : List list = new ArrayList();
⦁ 삭제
- void clear() : 전부 삭제
- E remove(int index) : index의 값을 삭제하고 다시 정렬됨
< Vector >
멀티 스레드 환경에서 동시 사용 불가능하다.
동기화된 메소드로 되어있다.
< LinkedList >
⦁ ArrayList에서는 삽입, 삭제할 경우 뒤에 있는 값들이 다 움직여야해서 시간이 더 걸린다.
⦁ LinkedList는 객체를 기준으로 왼쪽에 객체가 연결되어 있고, 오른쪽에 객체가 연결되어 있다.
그래서 삽입, 삭제할 경우 양 옆의 연결 상태만 수정해 주면 되므로 시간면에서 훨씬 효율적이다.
∎ Set 컬렉션, 인터페이스
- 중복 저장 불가, 순서 없음
- 수학의 집합, 섞여있는 구슬 주머니와 비슷하다.
- index가 없으므로 Iterator를 통해 접근
Set 인터페이스의 메소드
- iterator() : 반복해서 객체를 가져옴
- hasNext() : 다음에 값이 있는지
- next() : 다음으로 가기
Set<String> set = ...;
Iterator<String> iterator = set.iterator();
while(iterator.hasNext()) {
String item = iterator.next();
}
for문을 이용해 삽입, 삭제 불가 -> for문은 반복 횟수를 정해놓고 시작하는데, 중간에 삽입이나 삭제를 해버리면 for문의 반복 횟수에 영향을 주어 예외가 발생한다.
∎ Map 컬렉션, 인터페이스
Map.Entry는 키와 값으로 이루어져 있고,
Map.Entry 객체의 번지를 저장하는 것이 Map 컬렉션이다.
- get(K) : 키에 해당하는 value 반환
- Set<Map.Entry<K,V>> entrySet() : Map.Entry 객체를 Set에 담아 반환
- Set< K> keySet() : 모든 키를 Set에 담아 반환
- Collection< V> values() : 모든 value를 Collection에 담아 반환
<구현 클래스 종류>
⦁ HashMap
- Map<K, V> map = new HashMap<K, V>();
➞ K, V는 참조 타입만 가능
ex. Map<String, Integer> = new HashMap<>();
⦁ 키의 중복 확인 (동등 객체인지 확인)
hashCode 같은지 확인 ➞ equals 같은지 확인
⦁ HashTable
- synchronized 메소드로 구성되어 있어서 여러개의 스레드를 사용할 때 용이하다.
⦁ Properties
- . properties 파일을 읽을 때 사용한다.
- 키와 값이 모두 String 타입이다.
- HashTable의 자식 클래스이다.
- 파일 내용 읽는 메소드 : InputStream getResourceAsStream(String name)