이번엔 컬렉션 프레임워크 중에서 Set , Map, HashMap에 대해 알아보겠습니다.
1. Set
- 순서를 보장하지 않는다. -> 인덱스로 객체를 가져오는 get()메서드가 없다.
- 중복 저장이 불가하다.
- Set을 상속받아 구현한 HashSet, TreeSet 등이 있다.
Set<String> set = new HashSet<>();
set.add("A");
set.add("B");
set.add("A");
for(String item : set){
System.out.print(item); // AB
}
set.contains("A"); // true
set.size(); // 2
set.isEmpty(); // false
set.remove("A"); // [B]
set.clear(); // []
* TreeSet은 내부적으로 이진 검색 트리를 사용하여 요소를 저장하기 때문에 요소가 자연 순서 또는 제공된 비교기(comparator)에 따라 정렬됩니다.
Set<String> set = new TreeSet<>();
set.add("B");
set.add("A");
set.add("A");
for(String item : set){
System.out.print(item); // AB
}
* new Set은 안되나요? Set은 인터페이스로 직접 new Set()으로 인스턴스화 할 수 없고 구현된 클래스를 사용해야 합니다.
선언과 동시에 초기화도 가능합니다.
// Java 9 이전 버전
Set<String> set = new HashSet<>(Arrays.asList("A", "B", "C"));
// Java 9 이후 버전
Set<String> set = Set.of("A", "B", "C");
2. Map
- 키(key)와 값(value)으로 구성된 객체를 저장하는 자료구조.
- 키는 중복으로 저장할 수 없으며 하나의 키에 하나의 값만 매핑 가능
- key를 통해 값을 얻음
- 구현 클래스로는 HashMap , TreeMap 등이 있다.
Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
for(Map.Entry<String, Integer> entry : map.entrySet()){
System.out.println(entry.getKey() + ":" entry.getValue());
}
// A : 1
// B : 2
map.containsKey("A"); // true
map.containsValue(1) // true
map.remove("A"); // {B-2}
Collection<Integer> values = map.values(); [1,2]
Set<String> keys = map.keySet(); // [A,B]
map.size(); // 2
map.isEmpty(); // false
map.clear(); // {}
* HashMap은 순서가 보장되지 않고, 키와 값으로 null을 허용하지만 TreeMap은 순서가 보장되며 키와 값으로 null을 허용하지 않습니다.
3. Iterator
- 컬렉션의 요소를 순차적으로 접근하는 데 사용되는 인터페이스
- ArrayList, HashSet, HashMap 등에서 제공하여 요소 순회
- boolean hasNest() - 반복자가 순회할 다음 요소가 있으면 true, 없으면 false
- E next() - 다음 요소 반환, 없으면 예외 발생
- void remove() - 반복자의 현재 위치 요소 제거 next() 호출 후에만 사용 가능
Set<String> set = new TreeSet<>();
set.add("B");
set.add("A");
Iterator<String> iterator = set.iterator();
while(iterator.hasNext()){
String item = iterator.next();
System.out.print(item); // BA
}
어? for-each가 더 간단한거 같은데요? 맞아요. 근데 결국 for-each도 Iterfator를 간편하게 사용하기 위해 제공되는 루프 구조입니다.
'Java' 카테고리의 다른 글
(spring) Exception 이녀석........ (0) | 2024.06.18 |
---|---|
Logger 딱 대 (2) | 2024.06.17 |
익명 클래스 / 람다식 / 메소드 참조 (1) | 2024.06.08 |
형 변환 / valueOf() / stream (0) | 2024.06.07 |
String / StringBuilder / StringBuffer (1) | 2024.06.07 |