15-1. Set
HashSet.
Value값만 저장하고 , index개념이 없다. 순서가 없고 중복이 없다!!
문자열만 담을 수 있는 HashSet을 만들어서 조작해보자.
HashSet<String> set = new HashSet();
set.add("순서가 정해져 있지 않다.");
set.add("이 스트링과");
set.add(new String("이 스트링과"));
set.add("는 같다.");
set.size();
set.remove("순서가 정해져 있지 않다.");
set.clear();
HashSet 메소드
add() : 요소 추가
size() : 요소 개수 (크기)
remove() : 요소 삭제
clear() : 모든 요소 삭제
HashSet의 특징 : 값이 추가가 될 때마다 equals()와 HashCode()로 비교 후 둘 다 결과가 true일 경우 동일 객체로 판단한다. => 동일 객체는 중복이라 추가될 수 없다!
두 students의 객체는 내용물은 같은데 주소값이 다르므로 둘 다 출력된다.
왜? 위에 String "이 스트링과" 는 중복값으로 인정됐는데?
그건, String은 equals와 hashCode를 override 해줬기 때문.
Student도 똑같이 override 해주자.
HashSet<Student> students = new HashSet();
students.add(new Student("홍길동, 15, 100));
students.add(new Student("홍길동, 15, 100));
//=====================================================
public class Student {
@Override
public int hashCode() {
return (name + age + score).hashCode();
}
@Override
public boolean equals(Object obj) {
Student other = (Student)obj;
if(!this.name.equals(other.name) || this.age != other.age || this.score != other.score) {
return false;
}
return true;
}
}
자동완성도 있음... Alt + Shift + s -> h
HashSet은 인덱스가 없는데 값을 어떻게 빼는가.
1. 모두 출력
for(Student s : students) {
System.out.println(s);
}
2. HashSet의 내용물을 AraayList에 담아서 인덱스를 이용해서 출력
ArrayList list = new ArrayList();
list.addAll(students);
3. Iterator를 통한 반복을 이용해서 출력
Iterator it = students.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
iterator() : String의 StringTokenizer와 비슷한 원리. Set계열과 List계열에서만 호출이 가능하다!(Map에서는 바로 호출 불가능!)
'JAVA > JAVA수업' 카테고리의 다른 글
#17. Map, Network (0) | 2023.07.25 |
---|---|
#16. Test2 / 과제 (0) | 2023.07.24 |
#14. I.O(Writer/Reader), buffer, Collection, List (0) | 2023.07.20 |
#13. API, I.O(Input/Output) (0) | 2023.07.19 |
#12. 추상클래스, 인터페이스, 예외처리 (0) | 2023.07.18 |