반응형
Set Interface
기본적으로 Set혹은 Set계열을 구현하는 클래스들은 다음과 같은 공통점이 있다.
- 중복되는 요소(원소)를 허용하지 않는다.
- 저장 순서를 유지하지 않는다. (LinkedHashSet 만 예외)
HashSet
HashSet은 Set 인터페이스에서 지원하는 구현 클래스이기 때문에 Set의 성질을 그대로 상속받는다는 것이 특징이다.
여기서 HashSet 은 Set의 특징에 더해 null값을 허용해주는 특징을 하나 더 가진다.
- 중복되는 요소(원소)를 허용하지 않는다.
- 저장 순서를 유지하지 않는다.
- null값을 허용한다.
이러한 HashSet은 어떨 때 쓰이면 좋을까?
데이터가 정렬되어있을 필요도 없고, 빠르게 중복 여부만 확인하면 되는 경우에 사용하기 좋다.
예를 들면 회원 가입시 아이디의 중복 확인과 같은 존재 여부의 탐색에 용이하다.
HashSet 사용법
Hash 생성
// 타입을 지정 가능
HashSet<String> user1 = new HashSet<String>();
// 타입을 생략하여 사용 가능 -> 빈 HashSet생성 시 사용
HashSet<String> user2 = new HashSet<>();
// 초기 용량(Capacity) 설정
HashSet<String> user3 = new HashSet<>(10);
// user1의 모든 값을 가진 HashSet 생성
HashSet<String> user4 = new HashSet<>(user1);
//초기값 지정 가능
HashSet<String> user5 = new HashSet<>(Arrays.asList("Sean", "John", "Mason"));
메소드
메소드는 위 사진처럼 추가, 삭제, 존재여부, 비교, 비어있는지의 여부, 크기, 전체삭제 등 여러 메소드를 제공하는데 이외에도 다양한 메소드가 있으니 https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Set.html 참조.
많이 쓰이는 메소드들의 사용 예시는 다음과 같다.
HashSet<String> user = new HashSet<>(Arrays.asList("Sean", "John", "Mason"));
// 요소 추가
user.add("Jenny");
// 요소 삭제
user.remove("Sean");
// user 크기 : 3
System.out.println(user.size());
// user내부에 값 "Sean"이 있다면 true 출력, 없다면 false 출력
System.out.println(user.contains("Sean"));
// 출력결과 : [Mason, John, Jenny]
System.out.println(user);
// import java.util.Iterator 추가 필요
Iterator iter = user.iterator();
// hasNext() : 가져올 객체가 있다면 true 리턴, 없다면 false 리턴
// next() : Iterator에서 하나의 객체를 가져올 수 있는 메소드
while(iter.hasNext()) {
System.out.println(iter.next());
}
// 비어있는지 여부 확인. 결과 : false
System.out.println(user.isEmpty());
// 모든 값 제거
user.clear();
// 출력결과 : []
System.out.println(user);
// 비어있는지 여부 확인. 결과 : true
System.out.println(user.isEmpty());
조금 더 자세한 원리를 확인하기 위해서는 아래의 포스팅을 참고하면 되겠다.
반응형
'Java > 개념정리' 카테고리의 다른 글
[Java] 배열 정렬하기 (Arrays.sort(), Collections.reverseOrder() 사용) (39) | 2023.10.30 |
---|---|
[Java] 문자열 분리 (split, StringTokenizer 사용법) (88) | 2023.10.27 |
[Java] Scanner 와 BufferedReader 차이점 (0) | 2023.10.16 |
Java 용어 정리 (0) | 2020.12.15 |