이전에 포스팅한 컬렉션프레임워크에서 추가로 정리하지않은 Set 과 Map 을 정리하여 포스팅을 시작하겠습니다.
Set 인터페이스
- Set 인터페이스는 중복을 허용하지 않고 저장순서가 유지되지 않는 컬렉션 클래스를 구현하는데 사용됩니다. 대표적으로는 HashSet, TreeSet 이 있습니다.
HashSet
Set 인터페이스를 구현한 가장 많이 사용되기도 하는 대표적인 컬렉션 입니다. Set 인터페이스의 특징대로 HashSet 도 중복된 요소를 저장하지 않습니다. Hashset은 중복을 허용하지 않기 위해 객체를 추가하기 전에 기존에 저장된 요소와 같은 것인지 판단하기 위해 요소의 equlas() 와 hashCode()를 호출 합니다. 만약 객체를 비교한다고하면 equlas()와 hashCode()를 목적에 맞게 오버라이딩해야 합니다.
선언방법
Set<Integer> hs1 = new HashSet<>(); //Integer 타입만 저장 하는 HashSet 객체 생성
Set<Integer> hs2 = new HashSet<>(Collections c) // 주어진 컬렉션을 포함하는 객체 생성
Set<Integer> hS3 = new HashSet<>(int initialCapacity) //주어진 값을 초기용량으로 하는 객체 생성
HashSet 활용 예제
import java.util.HashSet;
import java.util.Set;
class HashSetExam {
public static void main(String[] args) {
Set<Integer> hs = new HashSet<>();
int[] list = {1, 1, 2, 2, 3, 4, 5, 5, 5, 6, 7};
for (int i : list) {
hs.add(i); //값 추가
}
for (Integer h : hs) {
System.out.print("추가된 값: " + h + " ");
}
System.out.println();
hs.remove(5); //값 5 제거
System.out.println("지정한 값 검색(5): " + hs.contains(5));
System.out.println("지정한 값 검색(6): " + hs.contains(6));
System.out.println("hs 크기 = " + hs.size()); //크기 구하기
}
}
TreeSet
TreeSet은 간단히 설명 드리겠습니다. TreeSet은 이진 검색 트리(Binary Search Tree)라는 자료구조의 성능을 향상시킨 레드-블랙 트리로 구현되어있는 데이터를 저장하는 컬렉션 클래스 입니다. 마찬가지로 Set을 구현했기 때문에 중복된 데이터의 저장을 허용하지 않으며 정렬한 위치에 저장하므로 저장순서를 유지하지 않습니다.
사용법은 HashSet과 유사하지만 아래와 같은 구조로 이루어져 있고, 값의 저장이 이루어 집니다.
Map 인터페이스
Map 인터페이스는 키(key)와 값(value)을 하나의 쌍으로 묶어서 저장하는 컬렉션 클래스를 구현하는데 사용됩니다. 키는 중복이 될 수 없지만 값은 중복이 가능합니다. 기존에 저장된 데이터와 중복된 키와 값을 저장하게 된다면 기존의 값은 없어지고 마지막에 사용한 값만 저장이 됩니다. 덮어쓰기와 같다고 생각하면 될 것 같습니다. Map 인터페이스를 구현한 클래스는 HashTable, HashMap, LinkedHashMap, SorteMap, TreeMap 등이 있습니다.
HashMap
HashMap은 Map을 구현했으므로 키와 값을 묶어 하나의 데이터로 저장하는 특징을 가진다. 그리고 해싱을 사용하기 때문에 많은 양의 데이터를 검색하는데 있어 뛰어난 성능을 보입니다.
선언방법
Map<Object, Object> hm1 = new HashMap<>(); //HashMap 객체 생성
Map<Object, Object> hm2 = new HashMap<>(int initialCapacity); //지정된 값을 초기용량으로 하는 객체 생성
Map<Object, Object> hm3 = new HashMap<>(hm1); //지정된 Map의 모든 요소를 포함하는 객체 생성
HashMap 활용 예제
import java.util.HashMap;
import java.util.Map;
class HashMapExam {
public static void main(String[] args) {
Map<String, Integer> hm = new HashMap<>();
hm.put("prodo", 5);
hm.put("muzi", 3);
hm.put("apeach", 4);
hm.put("neo", 4);
hm.put("prodo", 9);
hm.remove("muzi"); //무지 삭제
System.out.println("전체 출력:" + hm);
System.out.println("키 값(prodo)의 value =" + hm.get("prodo"));
for (String s : hm.keySet()) {
System.out.print("key값:" + s + " ");
}
}
}
'자바 (ref. 자바의정석)' 카테고리의 다른 글
람다식(Lambda expression) - JAVA (0) | 2022.03.17 |
---|---|
제네릭스(Generics) - JAVA (0) | 2022.03.10 |
컬렉션 프레임워크(Collections Framework) - JAVA (0) | 2022.03.08 |
Comparator 와 Comparable - JAVA (3) | 2022.03.07 |
String 클래스 - JAVA (0) | 2022.02.24 |