HashSet

아기코딩단2·2022년 4월 4일
0
byte[] buf = {
    0x0b, 0x41, 0x42, (byte) 0xea, (byte) 0xb0, (byte) 0x80, (byte) 0xea, (byte) 0xb0,
    (byte) 0x81, (byte) 0xea, (byte) 0xb0, (byte) 0x84, 0x00, 0x00, 0x00, 0x1b, 0x01};

뒤에있는 1바이트 값만 쓰기위해서

// 1) toString()
//    - 클래스 정보를 간단히 출력한다.
//    - 패키지명.클래스명@16진수해시값
//    - 예) ch15.My1@1e81f4dc
//
System.out.println(obj.toString());

// println()에 넘겨주는 값이 String 타입이 아니라면
// println()은 그 객체에 대해 toString() 호출한 후 그 리턴 값을 출력한다.
// 따라서 다음 코드는 위의 코드와 같다.
System.out.println(obj);


My obj2 = new My();
My obj3 = new My();

하면 인스턴스가 없더라도 다른 주소를 가짐(클래스 정보를 저장한 기본객체 생성댐)

toString overridng 해주면 됨 값을 확인하고 싶을 떄

object의 equals는 주소를 비교한다(이거 쓰고 싶으면 override하면 댐)
String equals는 내용 비교함

equals 오버라이딩 할 때 우클릭 제네레이트 해시코드 어쩌구 어쩌구 누르면 됨

hash값(value, code) = 디지털 지문(데이터를 구별하는 식별코드) // 근데 같게 만들 수 있음

같은 데이터임을 검사할 때 Hash값 사용함

linked list 단점 한번에 딱 못찾음!

Hashset :
// 집합?
// => 중복 값을 저장할 수 없다.
//
// HashSet
// => 집합의 기능을 수행한다. 중복 값을 저장하지 않는다.
// => 저장할 객체에 대해 hash 코드로 중복 여부를 검사한다.
// => 해시 값이 다르면 다른 값으로 취급한다.
// => 또한 hash 코드로 값을 저장할 인덱스를 결정하기 때문에
// 값을 꺼낼 때 저장한 순서대로 꺼낼 수 없다.
//

// 현재 예제의 문제점?
// => s1과 s2는 같은 데이터를 갖고 있지만, 다른 해시 코드를 리턴하기 때문에 
//    HashSet 입장에서는 s1과 s2를 다른 값으로 취급한다.
// => 그래서 s1과 s2 모두 HashSet에 보관된 것이다.
// 
// 해결책?
// => Student 클래스에서 hashCode()를 오버라이딩 하여 
//    같은 데이터에 대해 같은 해시코드를 리턴하도록 만들어야 한다.
profile
레거시 학살자

0개의 댓글