< HashSet >
- Set계열 : 담고자 하는 값(Value)만 저장 / 저장시 순서 없음 / 중복값 허용하지 않음
- 사용법은 List계열과 비슷
[ 표현법 ] Hashset 객체 이름 = new HashSet();
> 생성
HashSet<String> hs = new HashSet(); // 제네릭 설정
> 값 추가 - add(추가할 값)
hs.add("안녕하세요!");
hs.add("여러분");
// 순서 보장되지 않음
> 크기 확인 - size()
System.out.println("hs의 크기 : " + hs.size());
> 값 삭제 - remove(삭제할 값)
hs.remove("여러분");
> 비우기 - clear() : 모든 값을 삭제해주는 메소드
hs.clear();
[ 중복값 거르는 법 ]
- HashSet에 객체를 담을 때, 내부적으로 equals()*와 hashCode()*로 비교 후
둘 다 결과가 true일 경우 동일 객체로 인식하여 중복된 값을 거름
- 중복저장 오류를 방지하기 위해 equals와 hashCode메소드를 오버라이딩 해서 사용
* equals() : 두 객체의 주소값을 비교해서 일치하면 true, 불일치하면 false 반환. Object클래스의 메소드
* hashCode() : 객체의 주소값을 해싱해서 10진수 형태로 반환. Object클래스의 메소드
[ 값 출력 ]
1. 반복문 사용 - 인덱스 개념이 없기 때문에 향상된 for문 사용
// 내가 만든 Student객체가 담긴 HashSet stds
for(Student s :stds) {
System.out.println(s);
}
2. ArrayList 사용 - HashSet의 값을 ArrayList에 담아, 인덱스를 이용하여 출력
// 1단계) ArrayList 생성
ArrayList list = new ArrayList();
// 2단계) addAll메소드 사용하여 값 넣기
list.addAll(stds);
// 1단계 + 2단계
ArrayList<Student> students = new ArrayList(stds); // 생성자 안에 넣어서 처리
// for문으로 출력 - ArrayList 인덱스 사용 가능
for(int i = 0; i <list.size(); i++) { // 반복문 size()사용
System.out.println(list.get(i));
}
3. Iterator(반복자) 사용 - iterator() : HastSet을 Iterator타입으로 변환해주는 메소드
Iterator it = stds.iterator();
while(it.hasNext()) { // hasNext() : 더 빼올 값이 남아있으면 true, 없으면 false를 반환해주는 메소드
System.out.println(it.next()); // next() : 다음에 오는 값을 반환해주는 메소드
}
'개발 > Java' 카테고리의 다른 글
[Java] 자바 - 컬렉션 - Properties (0) | 2022.09.25 |
---|---|
[Java] 자바 - 컬렉션 - HashMap (0) | 2022.09.25 |
[Java] 자바 - 컬렉션 - ArrayList (1) | 2022.09.25 |
[Java] 자바 - API - Wrapper 클래스 (0) | 2022.09.24 |
[Java] 자바 - java.lang / API - Math 클래스 (0) | 2022.09.24 |