● Set : 집합
1. 구현 클래스
(1) HashSet
- 집합에서는 중복되는 원소를 포함할 수 없는 것 처럼 HashSet이라는 자료구조는 중복되는 값을 무시한다.
- 저장된 값들은 인덱스가 없기 때문에 순서가 없다.
- 값의 유무 검사에 특화되어 있는 자료구조이다.
- hashCode()로 유무 검사가 진행되고 속도가 상대적으로 좋다.
2. 순서 부여
(1) iterator()
- 순서가 없는 객체에 순서를 부여하거나, 순서가 있어도 iterator 방식의 순서로 변경하고자 할 때 사용한다.
- hasNext()를 통해 다음 값이 있는 지 검사하고, next()를 사용하여 값을 가져온다.
실습(HashSet & Iterator)
1. HashSet
import java.util.HashSet;
import java.util.Iterator;
public class HashSetTest {
public static void main(String[] args) {
HashSet<String> foodSet = new HashSet<>();
foodSet.add("치킨");
foodSet.add("떡볶이");
foodSet.add("족발");
foodSet.add("막국수");
foodSet.add("계란");
foodSet.add("포켓몬빵");
foodSet.add("포켓몬빵");
foodSet.add("포켓몬빵");
System.out.println(foodSet); // 중복은 들어가지 않는다.
System.out.println(foodSet.contains("치킨"));
}
}
![](https://blog.kakaocdn.net/dn/c7QNJw/btrvYIoQGFO/NWvIsgPQ9k8k2q7bFFtY11/img.png)
2. Iterator
import java.util.HashSet;
import java.util.Iterator;
public class HashSetTest {
public static void main(String[] args) {
HashSet<String> foodSet = new HashSet<>();
foodSet.add("치킨");
foodSet.add("떡볶이");
foodSet.add("족발");
foodSet.add("막국수");
foodSet.add("계란");
foodSet.add("포켓몬빵");
foodSet.add("포켓몬빵");
foodSet.add("포켓몬빵");
// foodSet이 Set 타입이 아닌 Iterator 타입으로 바뀐다.
Iterator<String> iter = foodSet.iterator(); // iterator 방식의 순서가 부여된다.
while(iter.hasNext()) { // hasNext()로 다음 값이 있는지 확인하고
System.out.println(iter.next()); // next()로 값을 가져온다.
}
}
}
![](https://blog.kakaocdn.net/dn/vuxbf/btrv6Xrw8st/doKH9DDxFhMxKqYB91q5P1/img.png)
실습(HashSet)
※ 참고
// hashCode()를 사용하는 자료구조에서 정확한 결과를 내기 위해서는
// equals()뿐만 아니라 hashCode()도 재정의 해야 한다.
// 아래 문제에서 equals()와 hashCode()를 재정의하지 않을 경우,
// 중복된 값이라도 저장된다.
// ※ Set은 중복값이 저장되지 않으므로 재정의가 필요하다.
1. Student.java 생성
- 필요한 변수 선언
int num;
String name;
- 생성자 생성
public Student() {;}
public Student(int num, String name) {
super();
this.num = num;
this.name = name;
}
- equals() 재정의
@Override
public boolean equals(Object obj) {
if(this == obj) { // 주소 비교
return true;
}
// obj에는 num이 없으므로 num이 있는 Student 타입으로 down casting 해준다.
if(obj instanceof Student) {
Student std = (Student)obj;
if(this.num == std.num) {
return true;
}
}
return false;
}
- hashCode() 재정의
@Override
public int hashCode() {
return num;
}
2. School.java에서 실행
import java.util.HashSet;
public class School {
public static void main(String[] args) {
Student han = new Student(1, "한동석");
System.out.println(han.equals(new Student(1, "한동석")));
HashSet<Student> attendance = new HashSet<>();
attendance.add(han);
attendance.add(new Student(1, "한동석"));
System.out.println(attendance.size());
System.out.println(attendance);
}
}
![](https://blog.kakaocdn.net/dn/dbWKwy/btrv4KfludA/Jow3KkPeuWa9qAk0Pjh7s1/img.png)
'웹 개발 > Java' 카테고리의 다른 글
[Web_JAVA] 33 (0) | 2022.03.19 |
---|---|
[Web_JAVA] 32 (0) | 2022.03.18 |
[Web_JAVA] 30 (0) | 2022.03.16 |
[Web_JAVA] 29 (0) | 2022.03.15 |
[Web_JAVA] 28 (0) | 2022.03.14 |