hashcode
private Integer id;
public int hashCode(){
return id;
}
나중에 찾아보니까 이렇게 써야 돼요.
private Integer id = new Integer(0);
public int hashCode(){
return id.hashCode();
}
equals():
이것은 두 대상을 비교하는 데 사용되며, 대상 내용의 비교이며, 당연히 대상의 참고 값을 비교하는 데도 사용될 수 있다.객체 참조 값 비교란?바로 두 참고 변수의 비교할 가치가 있는 것이다. 우리는 참고 변수의 값이 사실은 하나의 숫자라는 것을 알고 이 숫자는 서로 다른 대상을 감별하는 대호로 볼 수 있다.두 대상이 값을 참고하는 비교는 바로 두 숫자의 비교, 두 개의 대호의 비교이다.이런 비교는 기본적인 대상 비교 방식이다. Object라는 대상에서 이런 방식은 이미 설계되었다.그래서 너도 스스로 다시 쓸 필요가 없고, 불필요한 시간을 낭비할 필요가 없다.
대상 내용의 비교야말로 equals()를 디자인하는 진정한 목적이고 자바 언어가 equals()에 대한 요구는 다음과 같다. 이러한 요구는 반드시 따라야 한다.그렇지 않으면 너는 시간을 낭비해서는 안 된다.
대칭성: 만약 x.equals(y)가'true'로 되돌아온다면 y.equals(x)도'true'로 되돌아와야 한다.
반사성: x.equals(x)는 "true"로 되돌아와야 합니다.
유추성: 만약 x.equals(y)가'true'로 되돌아오고 y.equals(z)가'true'로 되돌아온다면 z.equals(x)도'true'로 되돌아와야 한다.
그리고 일치성: 만약 x.equals(y)가'true'로 되돌아온다면 x와 y의 내용이 변하지 않는다면 x.equals(y)를 몇 번 반복하든지 간에 되돌아오는 것은'true'이다.
어떠한 상황에서도 x.equals(null)는'false'로 영원히 되돌아온다.x.equals (x와 다른 유형의 대상) 는 영원히 "false"로 되돌아옵니다.
hashCode():
이 함수는 헤쉬 조작을 위한 정형 대호를 되돌려줍니다. 이 대호와 앞에서 말한 참고 변수가 대표하는 대호를 헷갈리지 마십시오.후자는 하나의 대호일 뿐만 아니라 메모리에서만 대상의 위치를 찾을 수 있는 기능을 가지고 있다.hashCode()가 반환하는 값은 특정 수집 객체에서 객체의 위치를 분류하는 데 사용됩니다.이러한 객체는 HashMap, Hashtable, HashSet 등입니다.이 함수와 위의 equals () 함수는HashMap,Hashtable,HashSet 등 자신이 수집한 대량의 대상을 검색하고 포지셔닝하는 데 도움을 줄 수 있도록 스스로 설계해야 한다.
이러한 수집 대상이 도대체 어떻게 작동하는지 상상하고 각 원 대상의hashCode는 하나의 상자의 인코딩이다. 인코딩에 따라 각 원 대상은hashCode()가 제공한 대호에 따라 상응하는 상자에 귀속된다.모든 상자를 합치면 HashSet,HashMap,Hashtable 대상이다. 우리가 원 대상을 찾아야 할 때 먼저 그 코드를 보면 바로 HashCode()가 되돌아오는 정형값이다. 이렇게 해서 우리가 그 상자가 있는 상자를 찾은 다음에 상자 안에서 모든 원 대상을 하나씩 꺼내서 우리가 찾는 대상과 비교한다. 만약에 두 대상의 내용이 같다면우리 수색도 끝이야.이런 조작은 두 가지 중요한 정보를 필요로 하는데 하나는 대상의hashCode()이고 다른 하나는 대상의 내용을 비교한 결과이다.
hashCode()의 반환값과 equals()의 관계는 다음과 같습니다.
만약 x.equals (y) 가 "true"를 되돌려준다면, x와 y의hashCode () 는 반드시 같아야 한다.
만약 x.equals(y)가 "false"를 되돌려준다면 x와 y의hashCode()는 같을 수도 있고 같지 않을 수도 있다.
왜 이 두 가지 규칙이 이러한지, 이유는 사실 매우 간단하다. 해시셋으로 말하자면, 해시셋은 한 개 이상의 상자를 가질 수 있고, 같은 상자에서 한 개 이상의 독특한 원 대상을 가질 수 있다(해시셋이 수용하는 것은 반드시 독특한 원 대상이어야 한다).이 예는 하나의 원 대상이 다른 다른 원 대상과 같은hashCode를 가질 수 있다는 것을 설명한다.그러나 하나의 원 대상은 같은 내용을 가진 원 대상과 같을 수밖에 없다.그래서 이 두 규칙은 반드시 성립되어야 한다.
참조 사이트 주소:http://blog.csdn.net/RichardSundusky/archive/2007/02/12/1508028.aspx
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
AS를 통한 Module 개발1. ModuleLoader 사용 2. IModuleInfo 사용 ASModuleOne 모듈...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.