231221 JAVA Set02(컬렉션 - set)

2023. 12. 21. 20:342023.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