본문 바로가기

TIL

TIL-220729 HashSet() 이란

오늘 코딩도장 문제는 수요일날 했었던 프로그래머스의 신고 결과 받기 인데 수요일날 도저히 모르겠어서 결국 답을 보고 배껴서 풀었는데 

오늘 다시 풀려고 하는데 기억이 나지 않는다.. 그래서 수요일날 풀었던 답을 보고 오늘 다시 한 번 배꼈는데 왜 기억이 안날 까 싶었는데 처음쓰는 메소드들이 있었는데 앞으로 Hash와 관련된 메소드들을 많이 사용할 꺼 같기도 하고 개념 정리가 안되서 그런건가 싶어서 정리를 해볼려고 한다.  오늘 알아 볼 녀석은 HashSet

 

 

HashSet

 

HashSet은  Set인터페이스의 구현 클래스이다.  Set은 객체를 중복해서 저장할 수 없고 하나의 값만 저장할 수 있다. 즉 중복 된 객체는 자동으로 제거 해준다는 것이다. 하지만 저장 순서는 유지되지 않는다.

예를 들면 편의점이나, 슈퍼에서 하루 동안 방문한 손님의 숫자를 계산하고 싶은데 여러 번 방문한 손님은 한 번 만 체크되게 해주고 싶다면 set을 유용하게 사용 할 수 있을 것 같다.

 

Hashset의 Hash는 Hashcode를 의미한다. 즉 해쉬코드를 사용해서 중복을 체크해주는 클래스이다.  HashCode는 16진수인 객체의 주소값을 10진수로 변환한 고유의 정수값이다. 

 

그렇다면 어떤 알고리즘으로 중복을 걸러내는 것일까? HashSet은 객체를 저장하기 전에 hashcode()메소드를 호출해서 객체의 해시 코드를 얻어낸 다음 저장되어 있는 객체들의 해시 코드와 비교한 뒤 같은 코드가 있다면 다시 equals()메소드로 두 객체를 비교한 뒤 값이 true가 나온다면 동일한 객체로 판단하고 해당 값을 저장하지 않는다. 

그렇다면 String객체는 어떤 알고리즘으로 값을 저장할까? 문자열을 저장할 경우에는 문자열의 값이 같다면 같은 객체로 판단을 한다. 

그 이유는 hashCode()와 equals()메소드에 String객체는 문자열이 같다면 hashCode의 값이 같게 설정되어 있고 equals() 메소드 또한 문자열의 값이 같으면 true를 반환하도록 overriding이 되어 있기 때문이다. 

 

 

'TIL' 카테고리의 다른 글

TIL-220730 Web Application Server  (0) 2022.07.30
메가테라 6주차 주간회고  (0) 2022.07.29
TIL-220728 정말 어려운 CSS  (0) 2022.07.28
2개나 더?!.. TIL-220727  (0) 2022.07.27
TIL-220726 하남자 특)  (0) 2022.07.26