KoreaIt Academy/JAVA

21. JAVA의 컬렉션 프레임워크 - HashSet , HashMap

hongeeii 2021. 7. 26.
728x90
반응형

저번시간에 컬렉션중의 하나인 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에 대해 알아보았습니다.

728x90
반응형

추천 글