21. JAVA의 컬렉션 프레임워크 - HashSet , HashMap
저번시간에 컬렉션중의 하나인 List에 대해서 알아보았습니다.
이번에는 Set과 Map에 대해 알아보겠습니다.
Set - HashSet
HashSet이란 Set인터페이스에서 지원하는 구현 클래스 입니다.
순서가 없고 중복을 허용하지 않는다는 것이 가장 큰 특징입니다.
순서가 없기 때문에 ArrayList처럼 index로 어떤 요소를 검색하여 가져오고 싶을 때는
HashSet을 사용하기에 부적절 합니다.
그렇다면 HashSet은 언제 사용하면 좋을까요?
HashSet은 주소(hashcod)로 접근하여 빠르게 순서없이 요소에 접근합니다.
그렇기 때문에 그 무엇보다도 컬렉션안에 어떤 요소가 있는지 검색할 때 빠를수 밖에 없습니다.
다음 예제는 ArrayList와 HashSet의 검색 속도 차이 비교 입니다.
hashSet은 밀리초로도 나타낼 수 없을 만큼 빠른속도를 자랑 하는것을 알 수 있습니다.
HashSet의 사용법
Set인터페이스와 List인터페이스는 Collection을 상속받습니다.
따라서 Arraylist와 Set의 사용법은 매우 비슷합니다.
다만 ArrayList는 index로 요소를 가져오지만, HashSet은 반복자(iterator)로 접근을 합니다.
Iterator 메소드에는 hasNext(), next(), remove()가 있습니다.
Iterator의 리턴값은 Iterator<E> 입니다.
각각의 기능은 다음과 같습니다.
hasNext() : 읽어올 요소가 남아있는지 확인하는 메소드입니다. 요소가 있으면 true, 없으면 false를 리턴합니다.
next() : 다음 데이터를 반환합니다.
remove() : next()로 읽어온 요소를 삭제합니다.
HashSet 사용 예제
Map - HashMap
HashMap이란 Map인터페이스의 한종류로써 키(Key) , 값(Value) 을 하나의 쌍으로 데이터를 저장하는 형태를 가지고 있습니다.
HashMap에서 주의할 점은, key값은 중복이 되지 않고 , value값은 중복이 허용된다는 점입니다.
중복된 key값이 추가 되면 원래의 value값은 새로운 value값으로 수정이 됩니다.
Map인터페이스는 List나 Set과 같이 Collection을 상속받지 않기 때문에 사용하는 법이 조금 다릅니다.
HashMap 선언
HaspMap<키의 타입, 데이터의 타입> 객체명 = new HaspMap<키의 타입, 데이터의 타입>(배열 수);
HashMap 메소드
V put(K key, V value)
- Key, Value를 삽입 하는 메소드입니다.
V remove(Object Key)
- 하나의 Key를 입력하여 데이터를 삭제합니다.
int size()
- HashMap에 저장된 엘리먼트의 개수를 반환합니다.
Collection<> values()
- HashMap에 저장된 엘리먼트들을 전부 컬렉션 형태로 출력합니다.
HashMap<String , Integer> map = new HashMap<String , Integer>(); map.put("자두", 1500); map.put("수박", 2300); map.put("딸기", 3400); map.put("망고", 4000); map.put("납작복숭아", 5600); System.out.println(map.values()); 결과 : [4000, 2300, 1500, 3400, 5600]
V get(Object Key)
- Key값에 대한 엘리먼트를 가져옵니다.
boolean containsKey(Object Key)
- HashMap의 엘리먼트중 key를 포함하고 있는지 여부를 확인합니다.
boolean containsValue(Object value)
- HashMap의 엘리먼트중 value를 포함하고 있는지 여부를 확인합니다.
Set<Map.Entry<K,V>> entrySet()
- HashMap에 저장된 Key, Value값을 Entry(키와 값을 결합)의 형태로 Set에 저장하여 반환합니다.
Set<K> keySet()
- HashMap의 모든 요소의 키만 'Key' 형태로 묶어 Set으로 반환합니다.
void forEach(BiConsumer<? super K, ? super V> action)
- List, Map 등을 순회(Iterate)하는데 사용됩니다.Map<String, String> map = new HashMap<>(); map.put("자두", "3000"); map.put("수박", "4000"); map.put("딸기", "5000"); map.put("망고", "6000"); ///////////////방법 1 : 익명객체/////////// map.forEach((new BiConsumer<String, String>() { @Override public void accept(String k, String v) { System.out.println("key: " + k + ", value: " + v); } })); //////////////방법 2 : 람다식/////////// map.forEach((k,v)->System.out.println("key: " + k + ", value: " + v)); //////////결과/////////// key: 망고, value: 6000 key: 수박, value: 4000 key: 자두, value: 3000 key: 딸기, value: 5000
HashMap 사용 예제
이상으로 HashSet과 HashMap에 대해 알아보았습니다.
'KoreaIt Academy > JAVA' 카테고리의 다른 글
23. JAVA의 쓰레드(Thread), 동기화(synchronized), 상태제어(wait, join, sleep, interrupt, interrupted) (0) | 2021.07.28 |
---|---|
22. JAVA 의 스트림(Stream), filter, map, sorted, forEach, collect (0) | 2021.07.27 |
20. JAVA의 제네릭, 컬렉션 프레임워크 - LIST (0) | 2021.07.23 |
19. JAVA의 Wrapper 클래스, 박싱(Boxing), 언박싱(UnBoxing) (0) | 2021.07.22 |
18. JAVA의 예외(Exception), 에러(Error), try-catch문, throw, throws (0) | 2021.07.22 |
댓글