본문 바로가기
Dev/Java

09-2.Collection(HashSet, HashMap)

by YoonYeoJin 2023. 8. 7.

저번 게시글에서는 ArrayList와 배열에 대한 차이점과

ArrayList에서 사용할 수 있는 메소드를 알아봤는데

이번에는 HashSet과 HashMap을 알아보려고 한다.

 

1. HashSet

HashSet은 ArrayList와 마찬가지로 동일하게 함수를 사용할 수 있다.

그러나 차이점이 있다.

코드로 바로 알아보자

사진으로 볼 수 있듯이 ArrayList는 리터럴 그 자체로 추가를 하던, String 객체로 추가를 하던 ArrayList에 저장이 되는 것을 확인 할 수 있다.

 

그러나 HashSet의 경우를 살펴본다면

 

이렇게 5개의 데이터를 넣었지만, 중복된 데이터는 저장이 되지 않는 것을 확인 할 수 있다.

 

즉, HashSet은 HashSet이라는 공간에 추가가 될 때마다 동일 객체인지 비교 후 동일 객체로 판단되면 저장이 되지 않는 것을 확인할 수 있다.

 

그리고 또 한가지가 더 있는데

코드를 살펴보면 안녕하세요 → 감사해요 → 예? → 안녕하세요 → 예? 순으로 기록을 했지만

출력결과를 살펴보면 예? → 안녕하세요 → 감사해요 순으로 출력이 되는 것을 알 수 있다.

즉, HashSet은 저장순서와 출력순서가 일치하지 않는다는 것을 알 수 있다.

 

또한 HashSet에 들어있는 값을 출력하기 위해서는 foreach문 밖에 사용할 수 없는데 그 이유를 알아보자면

HashSet은 아까 살펴본 것처럼 인덱스 개념이 적용되지 않기때문에 일반적인 for문을 사용하게 되면

사진과 같이 출력문 안에 적을 내용이 없기 때문이다.

 

그래서 사진과 같이 foreach문을 사용해서 안에 있는 값들에 접근해서 가져와야한다.

 

2. HashMap

HashMap은 HashSet과 ArrayList와 달리 Collection을 구현한 클래스가 아니기 때문에 

ArrayList와 HashSet이 add()를 사용해서 데이터를 추가하는 방법과 달리

HashMap은 put()이라는 메소드를 사용한다.

 

이를 간단하게 살펴보면

사진과 같이 put()메소드는 put(Key, value)의 형태로 저장이 되는 것을 확인할 수 있다.

또한 get(Key)메소드도 있는데

이렇게 사용하게 되면

value 값인 가나다가 반환되는 것을 확인할 수 있다.

 

그외 HashSet과는 큰 차이가 없는 컬렉션 개념이라고 할 수 있다.

 

그리고 Map 계열을 Set으로 바꿔주는 메소드가 2개 있는데 하나씩 살펴보면

 

 1) keySet()

사진과 같이 keySet()을 사용하면 key값만을 저장할 수 있다.

그렇게 해서 저장된 key값을 반복문을 이용해서 get()을 사용하면 원하는 결과가 출력된다

 

2. entrySet()

keySet()과 차이가 있다면

Entry의 Generic으로 key value의 데이터를 지정해놓기 때문에 미리 형변환을 해놓을 필요가 없다는 점이다.

 

 

이렇게 컬렉션들의 개념을 알아봤는데 ArrayList만 주로 사용하다가 프로젝트를 하면서 종종 HashMap을 사용하는 다른 친구들을 봐서 그런지 한번쯤은 정리하고 싶었다.

 

그럼 이만~

'Dev > Java' 카테고리의 다른 글

10.Network  (0) 2023.08.10
09-1.Collection(ArrayList)  (0) 2023.08.02
08.IO(2) - 문자 기반 스트림, 버퍼(보조스트림)  (0) 2023.07.31
07.IO(1) - file, 바이트기반스트림  (0) 2023.07.30
06.StringTokenizer  (1) 2023.07.27