2023. 12. 21. 20:34ㆍ2023.11.21-2024.05.31
package com.sukgi.coll;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
//set에 하나의 값만 저장하는데, 그게 처음 값인지, 나중에 들어온 값인지?
public class Set02 {
public static void main(String[] args) {
Set<String> set1 = new HashSet<>();
set1.add("홍길동");
set1.add("홍길동");
set1.add("홍길동");
set1.add("홍길동");
set1.add("홍길동");
String name = new String("홍길동");
System.out.println(System.identityHashCode(name));
set1.add(name);
name = new String("박길동");
System.out.println(System.identityHashCode(name));
set1.add(name);
System.out.println("======================================");
System.out.println(set1.size());
1521118594
1940030785
======================================
2
System.identityHashCode 메서드는 주어진 객체의 해시 코드를 반환하는 Java의 메서드입니다. 이 메서드는 Object 클래스에서 상속되었으며, 객체의 실제 주소를 기반으로 하는 해시 코드를 생성합니다. 이는 객체가 동일한지 여부를 판별하는 데 사용될 수 있습니다.
주의할 점은, System.identityHashCode가 반환하는 해시 코드는 Object 클래스의 hashCode 메서드가 반환하는 값과 다를 수 있습니다. Object 클래스의 hashCode 메서드는 객체의 내용에 기반하여 생성된 해시 코드를 반환하는 반면, System.identityHashCode는 객체의 실제 메모리 주소를 기반으로 하는 것이기 때문입니다.
"홍길동" 여러 번 추가:
- set1.add("홍길동");을 통해 "홍길동"을 여러 번 추가하더라도 HashSet은 중복을 허용하지 않으므로 중복된 값은 하나로 처리됩니다.
새로운 문자열 객체 추가
- String name = new String("홍길동");을 통해 새로운 문자열 객체 "홍길동"을 생성합니다.
- System.identityHashCode(name);를 사용하여 해당 객체의 해시코드를 출력합니다.
- set1.add(name);을 통해 새로운 문자열 객체를 추가합니다.
다른 문자열 객체 추가:
- name = new String("박길동");을 통해 새로운 문자열 객체 "박길동"을 생성합니다.
- System.identityHashCode(name);를 사용하여 해당 객체의 해시코드를 출력합니다.
- set1.add(name);을 통해 다른 문자열 객체를 추가합니다.
Set<Human> humans = new HashSet<Human>();
Human n = new Human();
humans.add(n);
n.ssn = 10;
humans.add(n);
n.ssn = 20;
humans.add(n);
n.ssn = 30;
humans.add(n);
n.ssn = 40;
humans.add(n);
System.out.println("======================================");
// 그럼 이거 뽑아서 숫자가 몇 인지 봐주세요
List<Human> humanList = new ArrayList<>(humans);
System.out.println(humanList.get(0).ssn);
}
}
class Human {
int ssn;
static int number;
public Human() {
this.ssn = ++number;
}
}
여기서 ssn은 Human 클래스의 인스턴스마다 유일한 값을 가집니다. 코드에서 Human 객체가 생성될 때마다 ssn은 증가하게 되어 각 객체는 서로 다른 ssn을 가지게 됩니다. 이렇게 함으로써 HashSet이나 Set에서 중복된 객체를 구분할 수 있습니다.
======================================
40
'2023.11.21-2024.05.31' 카테고리의 다른 글
231221 JAVA Study(오늘 할 것/앞으로 할 것) (1) | 2023.12.21 |
---|---|
231221 JAVA Map01(컬렉션 - map) (1) | 2023.12.21 |
231221 JAVA Set01(컬렉션 - set) (0) | 2023.12.21 |
231221 JAVA List03(컬렉션 - list) (0) | 2023.12.21 |
231221 JAVA List02(컬렉션 - list) (0) | 2023.12.21 |