MapleStory Cookie With Halo

☕ JAVA/☕ Variables & Data Type

[JAVA]HashSet

뉴이 NUEY 2024. 11. 23. 23:36
반응형

 

HashSet
: Set인터페이스의 가장 대표적인 구현클래스.

  • 순서❌중복❌
  • 보통 set을 사용한다하면 hashSet을 말한다.
순서를 유지하려면, LinkecHashSet클래스를 사용하면 된다.

 


 

생성자

  • 첫번째처럼 그냥 생성할 수도 있고

  • ()안에 Collection객체를 넣어서 ArrayList→HashSet 타입변환하면서 만들 수도 있다.
  • (용량, 몇 퍼센트 찼을 때 용량을 두배로 늘릴 지) 지정할 수도 잇다.

 


add(추가 값)

  • 중복된 값들은 저장되지 않았다.
    → false 반환.
    → 난수(random값)를 저장하기 좋다.

  • 순서가 있는 듯이 보이지만)사실상 순서도 없다.
    → 정렬sort 불가.

 

그 외 메서드
  • addAll(Collection c)
  • remove(Object o)
    → 지우고자 하는 값을 () 안에 적으면 된다.
  • removeAll(Collection c)
  • retainAll(Collection c)
    → 조건부 삭제. 차집합을 구할 때 사용한다.
  • clear()
    → 모두 삭제.
  • contains(Object o)
    → 요소 포함 여부
  • containsAll(Collection c)
    → 컬렉션 객체의 요소가 해시셋에 잇는 지 확인.
  • isEmpty()
  • size()
  • toArray()
메서드 사용법은 arrayList와 비슷하다.(메서드명도 일치)

2024.11.19 - [☕ 자바 JAVA/☕ 변수와 자료형 Variables & Data Type] - [JAVA]ArraList


 

예제

출력결과

  • Person이라는 클래스를 해시셋의 타입으로 지정했습니다.

  • new Person()이란 인스턴스 객체로 중복된 (민지, 20)라는 값을 넣었는데 모두 들어갔습니다.

  • HashSet은 중복을 제거하기 위해 해시코드(유일한 고유주소값)을 확인하는데, 인스턴스 객체로 추가했기 때문에 해시코드 값이 다르기 때문입니다.

  • 중복을 제거하기위해선, 아래와 같이 Person클래스에 equals()와 hashCode()메서드를 오버라이드해서 고쳐주어야 합니다.

수정된 Person 클래스 코드

 


 

집합구하기

하나씩 일일히 구하는 방법.
출력결과는 같습니다.

 

❗ 메서드를 이용해서 간단하게 하는 방법
주요메서드
교집합 retainsAll()
차집합 removeAll()
합집합 addAll()
※ 단순히 집합을 구한다면 메서드를 사용하면 됩니다. 만약 특정 부분 값을 집합에 포함하거나 제외해야 한다면 iterator를 이용해 조건을 추가하면 됩니다.

요즘은 set을 잘 사용하지 않습니다.
하지만 중복값이 없어야하고, 순서가 필요없고, 다양한 집합을 구할 일이 있다며 HashSet을 사용하는 것이 바람직합니다.

참조영상

반응형

'☕ JAVA > ☕ Variables & Data Type' 카테고리의 다른 글

[JAVA]HashMap<key, value>  (1) 2024.11.26
[JAVA]TreeSet  (1) 2024.11.25
[JAVA]연산자  (2) 2024.11.22
[JAVA]Iterator, ListIterator, Enumeration  (0) 2024.11.21
[JAVA]NaN과 Infinity  (0) 2024.11.21