반응형
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()메서드를 오버라이드해서 고쳐주어야 합니다.
집합구하기
❗ 메서드를 이용해서 간단하게 하는 방법
주요메서드
교집합 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 |