Java HashSet 클래스: 초보자를 위한 가이드
서론
안녕하세요, 미래의 자바 개발자 여러분! 오늘은 자바에서 HashSet의 놀라운 세계에 던지我们自己去看一看吧. 프로그래밍에 새로운 사람이라도 걱정하지 마세요; 저는 여러분을 이 여정을 단계별로 안내해 드리겠습니다. 그리고 저는 수년간 교육하면서 수많은 학생들을 안내한 바 있습니다. HashSet를 특별한 상자로 생각해보세요. 여기에는 중복되지 않는 독특한 아이템들을 저장할 수 있습니다! 이 상자는 각 종류의 양말 하나씩만 담을 수 있는 특별한 서랍과 같아요. 시작해보죠!
클래스 선언
자바에서 HashSet는 자바 컬렉션 프레임워크의 일부입니다. 사용하려면 먼저 임포트해야 합니다:
import java.util.HashSet;
HashSet의 기본 선언은 이렇게 보입니다:
HashSet<E> hs = new HashSet<E>();
여기서, 'E'는 HashSet에 저장하고 싶은 요소의 형식에 대한 자리 표시자입니다. 예를 들어, 문자열을 저장하려면:
HashSet<String> fruitBasket = new HashSet<String>();
매개변수
HashSet를 생성할 때, 선택 사항으로 두 개의 매개변수를 지정할 수 있습니다:
- 초기 용량: HashSet가 요소를 저장하기 위해 사용할 "버킷"의 수.
- 로드 faktor: HashSet가 자동으로 크기가 증가하기 전까지 얼마나 가득 찬 상태인지 측정하는 지표.
지금은 이렇게 볼 필요 없습니다. 이들을 마법 상자의 고급 설정으로 생각하면 됩니다!
클래스 생성자
HashSet는 네 개의 생성자를 제공합니다. 각각을 살펴보죠:
// Constructor 1: 기본 초기 용량(16)과 로드 faktor(0.75)로 빈 HashSet를 생성합니다
HashSet<String> set1 = new HashSet<>();
// Constructor 2: 지정된 컬렉션의 요소들을 포함하는 HashSet를 생성합니다
Collection<String> collection = Arrays.asList("Apple", "Banana", "Cherry");
HashSet<String> set2 = new HashSet<>(collection);
// Constructor 3: 지정된 초기 용량과 기본 로드 faktor(0.75)로 빈 HashSet를 생성합니다
HashSet<String> set3 = new HashSet<>(20);
// Constructor 4: 지정된 초기 용량과 로드 faktor로 빈 HashSet를 생성합니다
HashSet<String> set4 = new HashSet<>(20, 0.8f);
클래스 메서드
가장 일반적으로 사용되는 HashSet 메서드들의 표입니다:
메서드 | 설명 |
---|---|
add(E e) | 이 집합에 지정된 요소가 아직 존재하지 않는 경우 해당 요소를 추가합니다 |
clear() | 이 집합의 모든 요소를 제거합니다 |
contains(Object o) | 이 집합이 지정된 요소를 포함하고 있는지 여부를 반환합니다 |
isEmpty() | 이 집합이 요소를 포함하지 않으면 true를 반환합니다 |
remove(Object o) | 이 집합에 지정된 요소가 존재하는 경우 해당 요소를 제거합니다 |
size() | 이 집합에 있는 요소의 수를 반환합니다 |
상속된 메서드
HashSet는 부모 클래스들에서 메서드를 상속받습니다. 주목할 만한 몇 가지는 다음과 같습니다:
- Set에서: addAll(), containsAll(), equals(), hashCode(), removeAll(), retainAll()
- Collection에서: iterator(), toArray()
- Object에서: clone(), finalize(), getClass(), notify(), notifyAll(), wait()
HashSet에 요소 추가 예제
지식을 실제로 실천해보는 재미있는 예제를 만들어보죠. 우리가 가게에 독특한 아이스크림 맛을 추적할 프로그램을 만드는 것을 상상해보세요:
import java.util.HashSet;
public class IceCreamShop {
public static void main(String[] args) {
// 새 HashSet을 생성하여 아이스크림 맛을 저장합니다
HashSet<String> flavors = new HashSet<>();
// 몇 가지 맛을 추가합니다
flavors.add("Vanilla");
flavors.add("Chocolate");
flavors.add("Strawberry");
flavors.add("Mint Chip");
// 중복을 추가하려고 시도합니다
boolean added = flavors.add("Vanilla");
System.out.println("Vanilla를 다시 추가했나요? " + added);
System.out.println("우리의 아이스크림 맛: " + flavors);
System.out.println("우리는 " + flavors.size() + "개의 독특한 맛을 가지고 있어요!");
// 특정 맛을 가지고 있는지 확인합니다
String searchFlavor = "Rocky Road";
if (flavors.contains(searchFlavor)) {
System.out.println("네, 우리는 " + searchFlavor + "를 가지고 있어요!");
} else {
System.out.println("죄송합니다, 우리는 " + searchFlavor + "를 가지고 있지 않아요.");
}
// 맛을 제거합니다
flavors.remove("Strawberry");
System.out.println("Strawberry를 제거한 후 업데이트된 맛: " + flavors);
}
}
출력
이 프로그램을 실행하면 다음과 같은 결과를 볼 수 있습니다:
Vanilla를 다시 추가했나요? false
우리의 아이스크림 맛: [Vanilla, Mint Chip, Chocolate, Strawberry]
우리는 4개의 독특한 맛을 가지고 있어요!
죄송합니다, 우리는 Rocky Road를 가지고 있지 않아요.
Strawberry를 제거한 후 업데이트된 맛: [Vanilla, Mint Chip, Chocolate]
이제 무엇이 발생했는지 분석해보죠:
- 우리는
flavors
라는 HashSet을 생성하여 아이스크림 맛을 저장했습니다. - 네 가지 맛을 추가했습니다: Vanilla, Chocolate, Strawberry, 그리고 Mint Chip.
- Vanilla를 다시 추가하려고 시도했지만, HashSet는 중복을 허용하지 않으므로
add()
는false
를 반환했습니다. - 모든 맛을 인쇄했습니다. 추가한 순서와 다를 수 있음을 注意하세요 - HashSet는 삽입 순서를 유지하지 않습니다.
-
contains()
를 사용하여 Rocky Road 맛을 가지고 있는지 확인했습니다.我们没有,所以它打印了一个“抱歉”消息。 - 마지막으로, Strawberry를 제거하고 업데이트된 맛 집합을 인쇄했습니다.
그리고 그렇게 됐습니다! 여러분은 HashSet을 처음으로 만들고, 그 중요한 메서드 중 몇 가지를 사용한 것입니다. 기억하세요, HashSet은 독특한 요소들을 저장하고 순서에 신경 쓰지 않을 때非常有用. 이는 각각 다른 색상의 마블을 담고 있는 마블 가방과 같아요 - 특정 색상을 가지고 있는지 쉽게 확인할 수 있지만, 가방을 뒤집어 나가면 마블들이 어떤 순서로 나올지 제어할 수 없습니다.
자바 여정을 계속할 때, HashSet은 많은 상황에서 매우 유용하게 사용될 것입니다. 연습을 계속하고, 곧 HashSet의 전문가가 될 것입니다! 코딩을 즐겁게!
Credits: Image by storyset