Notice
Recent Posts
Recent Comments
Link
판봉 개발 일기
Set 컬렉션중 하나인 HashSet에 대하여 알아보자 본문
728x90
HashSet은 Set 인터페이스의 구현 클래스이다.
HashSet을 생성하는 방법은 다음과 같이 기본 생성자를 호출하면 된다.
Set<E> set = new HashSet<E>();
String 객체를 저장하는 HashSet은 다음과 같이 생성할 수 있다.
Set<String> set = new HashSet<String>();
Set<String> set = new HashSet<>();
무언가 어디서 많이 본것 같은건 비밀..
HashSet은 객체들을 순서 없이 저장하고 동일한 객체는 중복 저장하지 않는다는게 포인트이다.
HashSet이 판단하는 동일한 객체란 꼭 같은 인스턴스만을 의미하지 않는다.
HashSet은 객체를 저장하기 전에 먼저 hashCode()메소드를 호출하여 해시코드를 얻고,
객체들의 해시코드를 비교한다.
만약 동일한 해시코드가 있다면 다시 equals()메소드로 두 객체를 비교해서 true가 나오면 동일한 객체로 판단하게된다.
※번외로 String 클래스가 hashCode()와 equals()메소드를 재정의하기 때문에 같은 문자열이면 hashCode()의 리턴값은 같게되고 equals()의 리턴값을 true가 나온다.
다음 코드는 HashSet에 String 객체를 추가, 검색, 제거하는 방법이 써져있다.
import java.util.*;
public class HashSetExample {
public static void main(String[] argS) {
Set<String> set = new HashSet<String>();
set.add("Java");
set.add("JDBC");
set.add("Servlet/JSP는 아직 모르겠어");
set.add("Java");
set.add("iBATIS가 도대체뭐야");
int size = set.size()
System.out.println("총 객체수: " + size);
Iterator<String> iterator = set.iterator();
while(iterator.hasNext()) {
String element = iterator.next();
System.out.println("\t" + element);
}
set.remove("JDBC");
set.remove("iBATIS가 도대체뭐야");
System.out.println("총 객체수: " + set.size();
iterator = set.iterator();
for(String element : set) { // for- each문이다.
System.out.println("\t" + element);
}
set.clear();
if(set.isEmpty()) { System.out.println("당연히 비어 있을 수 밖에 없지");}
}
}
Set 컬렉션에 대해 설명한 글의 링크이다.
혹시 모르니 참고하실 분들은 참고하세요.
다음은 hashCode()와 equals() 메소드를 재정의한 코드이다.
public class Member {
public String name;
public int age;
public Member(String name, int age) { // 생성자를 매개변수를 통해 들어오도록 만듬
this.name = name; // String name = name; 이라는 뜻이다.
this.age =age;
}
@Override
public boolean equals(Object obj) { // name과 age값이 같으면 true를 리턴하도록함
if(obj instanceof Member) { // obj가 Member형으로 형변환이 된다면 이라는 뜻
Member member = (Member) obj;
return member.name.equals(name) && (member.age==age); //논리곱 둘다 true여야 true
} else {
return false;
}
}
@Override
public int hashCode() { // name과 age 값이 같으면 동일한 hashCode를 리턴
return name.hashCode() + age;
}
}
import java.util.*;
public class HashSetExample2 {
public static void main(String[] args) {
Set<Member> set = new HashSet<Member>();
set.add(new Member("판봉", 100));
set.add(new Member("판봉", 100)); // 인스턴스는 다르지만 내부데이터가 동일 1개만 저장
set.add(new Member("판봉", 40));
System.out.println("총 객체수 :" + set.size()); 저장된 모든 객체 수 얻기
}
}
'자바 복습' 카테고리의 다른 글
Map 컬렉션중 하나인 HashMap에 대하여 알아보자 (0) | 2021.07.13 |
---|---|
Map 컬렉션 (0) | 2021.07.13 |
Set 컬렉션에 대하여 알아보자 (0) | 2021.07.13 |
List 컬렉션중 하나인 LinkedList에 대하여 알아보자 (0) | 2021.07.13 |
List 컬렉션중 하나인 Vector에 대하여 (0) | 2021.07.13 |