본문 바로가기
프로그래밍/JAVA

33 Set 컬렉션 클래스(HashSet)

by 윤지(●'◡'●) 2021. 4. 29.
반응형

 


Set

 

 

- 집합 : 중복을 배제한다.
- 목적 : 값의 유무 검사

 

[특징]

1. 요소의 저장 순서를 유지하지 않는다.
2. 같은 요소의 중복 저장을 허용하지 않는다.

 

이러한 Set 컬렉션 클래스에 속하는 대표적인 클래스는 아래와 같다.

 

1. HashSet<E>

2. TreeSet<E>

 

이 둘중 HashSet<E>에 대해 알아보자

 

HashSet<E>

 

 

- 컬렉션에 HashSet 클래스는 set을 상속받아 순서가 없고 중복이 불가하다.

- 값(객체,데이터)을 중복해서 저장할 수 없다.
- 저장된 값들은 인덱스가 없기 때문에 저장 순서가 고정되어 있지 않다
- 해시 알고리즘(hash algorithm)을 사용하여 검색 속도가 매우 빠르다.

 

 

* HashSet 사용법

여러 HashSet메소드를 사용하여 ,  학생을 관리하는 예제를 살펴보자. 

 

[import]

import java.util.HashSet;

 

[선언(HashSet 선언)]

 

학생의 이름을 받을 String 타입 HashSet 생성

HashSet<String>std = new HashSet<>();

 

[학생추가(HashSet 값 추가)]

std.add("김사과");
std.add("오렌지");
std.add("이메론");
std.add("이춘식");

 

 

[학생삭제(HashSet 값 삭제)]

std.remove("춘식이");
//std.clear(); 전체값 삭제

 

[인원 수 확인(HashSet 크기 구하기)]

System.out.println(std.size());
3

 

 

[학생 이름 검색(HashSet 값 검색)]

System.out.println(std.contains("김사과"));
System.out.println(std.contains("이춘식"));
true
false

 

 

 

[학생 이름 출력(HashSet 값 출력)]

System.out.println(std);
[이메론, 김사과, 오렌지]

 

Set컬렉션에 그냥 출력메소드를 사용하면 대괄호 [ ]로 묶여 set의 전체 값이 출력된다.

Set에는 인덱스로 객체를 가져오는 get 메소드가 없다.

 

그렇다면 어떻게 값을 각 각 가져올 수 있을까?

Set에서는 get 대신 전체 객체를 대상으로 한 번씩 반복해서 가져오는 반복자(Iterator)를 제공한다.

 

이것을 사용해보자 :)

 

[Iterator]

Iterator<String>iter = std.iterator(); // iterator() 메소드 사용

while(iter.hasNext()) { // 값이 끝날 때 까지 true
			System.out.println(iter.next()); // 다음값을 계속 가져옴
		}
이메론
김사과
오렌지

 

hasNext() 해당 이터레이션(iteration)이 다음 요소를 가지고 있으면 true를 반환하고
더 이상 다음 요소를 가지고 있지 않으면 false를 반환함.
next() 이터레이션(iteration)의 다음 요소를 반환함.

 

 

 

 


열심히 공부하고 있지만, 오류 사항이 존재 할 수 있습니다.

수정 사항이 존재 할 경우 알려주시면 감사하겠습니다 <(__)>

반응형

'프로그래밍 > JAVA' 카테고리의 다른 글

35 Thread  (0) 2021.05.04
34 Map 컬렉션 클래스(HashMap)  (0) 2021.04.29
32 접근 권한 제어자(접근자)  (0) 2021.04.22
31 ArrayList를 사용한 문제 풀이  (0) 2021.04.22

댓글