DevBoi

[자료구조 공부] Hashset 사용하기 본문

Algorithm/[Etc]

[자료구조 공부] Hashset 사용하기

HiSmith 2021. 6. 26. 01:15
반응형

자료구조에 대한 걸 공부해야겠다는 필요성을 느꼈다.

왜냐하면, 너무 쓰던 자료구조만 쓴다.

예를 들면, ArrayList 말고 다른 자료구조를 쓰면, 더 효율적인데, ArrayList나 Map같이 그냥 쓰던것만 쓰거나.....등등

 

무튼 그래서, 하루에 한가지 자료구조를 파야겠다고 생각했고,

오늘이 그 첫번째, HashSet이다.

 

우선 선언 및 기본 print 

 

간단하게, Hashset에 A라는걸 add하고,print 한다.

add방식은 arrayList와 동일하다, index 로 탐색해야하는 것도 같다.

 

다만, 다른점은 !! 중복에 대한 자동 체크를 해준다는 것이다.

 

바로 이해되는 예제를 구현해봤다.

add로 A를 두번 add해도 자동으로, A는 한번밖에 담기지 않는다.

 

 

찾아보니 hashset은 다음과 같은 특징이 있다.

  • 중복된 값을 허용하지 않습니다.
  • 순서를 보장하지 않습니다.
  • null 값을 저장할 수 있습니다.
  • 내부적으로 HashMap을 사용하여 데이터를 저장합니다.

 

remove 사용방법 이다.

 

 

 

 

 

 

그리고 ArrayList에 담아서, removeAll로 실행하면,

해당 여러개의 값을 지울수 있다.

 

또한 contains 메소드 사용가능하다.

 

 

또한 Iterator 가 아니라, for문을 사용해서도 가능하다

 

 

 

그러면 HashSet은 단순 값만 추가 삭제가 가능할까?

객체는 안될까??

 

 

객체도 가능하다. 다만 객체의 속성값이 같아도, 해당 객체는 다른 주소를 참조하고있기떄문에,

다른 객체로 인식한다.

그러면 이건 중복체크가 불가능할까??

 

Class 내부에, 기본으로 선언되어있는 함수에 Override해서, hascode 기반으로

return 하고, 특정 속성값이 같으면, true나 false를 return해주는 것을 구현해주면된다.

이런식으로 하게 되면, 같은 name으로 하게되면 같은 class로 인식하게 된다.

 

 

 

마지막으로 HashSet에 대해서 정리를 하자면,

1. null 등록가능

2. remove,add,removeall 가능

3. contains가능

4. 객체 가능

5. 자동 중복 체크 add시에, 알아서 걸러줌

반응형