HashSet
Set 인터페이스의 구현 클래스
HashSet은 객체들을 순서없이 저장하고 동일한 객체를 중복 저장하지 않는다.
HashSet의 가장 큰 특징
HashSet이 판단하는 동일한 객체란 꼭 같은 인스턴스를 뜻하지 않는다.
HashSet은 객체를 저장하기전 먼저 객체의 hashCode() 메서드를 호출하여 해시코드를 얻고
이미 저장되어 있는 객체들의 해시코드와 비교한다. 만약 동일한 해쉬코드가 있다면 다시 equals() 메소드로
두 객체를 비교해 참이면 동일한 객체로 저장하고 중복 저장하지 않는다.
예시 코드
Member 클래스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | public class Member { private String name; private int age; public Member(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } //hashCode()와 eqauls() 재정의 @Override public int hashCode() { return name.hashCode() + age; //name과 age가 같으면 동일한 hashcode 리턴 } @Override public boolean equals(Object obj) { if(obj instanceof Member) { Member member = (Member) obj; return member.getName().equals(name) && (member.getAge() == age); //name과 age가 같으면 true } else { return false; } } } | cs |
HashSet을 이용한 동일한 데이터를 가진 객체 저장
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import java.util.HashSet; import java.util.Set; public class HashSetExample { public static void main(String[] args) { Set<Member> set = new HashSet(); set.add(new Member("홍길동", 30)); set.add(new Member("홍길동", 30)); //인스턴스는 다르지만 내부 데이터는 동일한 Memeber 인스턴스 2개 //2개를 모두다 넣지만 하나만 저장된다. (hashcode값이 같고, eqauls() true가 리턴되기에) System.out.println("총 객체 수 : " + set.size()); // 총 객체 수 : 1 출력 } } | cs |
'자료구조' 카테고리의 다른 글
[Map] HashTable과 HashMap의 차이와 Properties (0) | 2017.03.10 |
---|---|
[Map] HashMap (0) | 2017.03.10 |
[그래프]넓이 우선 탐색(BFS) (0) | 2017.03.07 |
[그래프] 인접리스트와 인접행렬을 이용한 구현 (0) | 2017.02.26 |
ArrayList와 LinkedList (0) | 2017.01.02 |