
// 객체가 같다 (동일, 동등)를 어떻게 비교할까?
// - 동일 : 가리키고 있는 것이 같다.
// - 동등 : 값이 같음
// 동일 객체 : 메모리 주소가 같은 객체
// hashCode()는 주로 이런 객체를 식별하는데 사용
// 동등 객체 : 메모리 주소가 다르더라도, 각 객체의 내부 값들이 같다면
// 동일한 객체로 간주하는 경우를 말함
// equals() 메서드는 이러한 객체가 같은지 판단할 때 사용
// 동일 비교 : Object.hashCode() 메서드 오버라이딩
@Override
public int hashCode() {
// 필드에 저장된 값을 이용해서 각각의 hashCode 생성
// hashcode : 객체별 식별 코드
return Objects.hash(age, gender, name); //ex) 홍길동 -->123451
// 홍길동 -->123451
// 김유리 -->363412
} // == : 주소를 비교
// equals() : 값 비교
// 동등 비교 : Object.equals() 메버스 오버라이딩
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
return age == other.age && gender == other.gender && Objects.equals(name, other.name);
}

Set은 get메서드가 없고 Iterator가 있다!
add(E e), size(), remove(Object o) 주로 사용!!
Set<String> set = new HashSet<String>();
set.add("몽쉘");
set.add("꼬북칩");
set.add("쿠크다스");
set.add("빈츠");
set.add("포카칩");
1. Iterator (반복자) 이용
- 컬렉션 객체에 저장된 요소를 하나씩 순차 접근하는 객체
Iterator set.iterator()
- 현재 Set을 순차 접근할 수 있는 Iterator 객체 반환
Iterator<String> it = set.iterator();
boolean Iterator.hasNext()
- 다음 순차 접근할 요소가 있으면 true, 없으면 false
while(it.hasNext()) {
// 다음 요소가 있으면 반복, 없으면 멈춤
// Iterator.next() : 다음 요소를 꺼내와서 반환
String temp = it.next();
System.out.println(temp);
}
---------------------------------------------------------
2. List로 변환
List<String> list = new ArrayList<>(set);
// Set에 저장된 객체를 이용해서 List를 생성
// set안에 있는걸 list로 복사하는 느낌
// -> 5개 과자들을 list로
Set -> List로 변환 과정
1) 빈 List를 객체 생성
2) addAll() 메서드나 생성자 등을 이용해서 Set의 요소들을 List에 추가
3) 변환 완료
// 일반 for문
for(int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
-----------------------------------------------------------
3. 향상된 for문
for(String snack : set) {
System.out.println(snack);
}
123 -> qwerty
asdjklakldfhjawe -> asdfgh

