hashCode는 무엇에 사용인가? 독특 소유?
나는이 알 getHashCode()
수 시퀀스를 반환 WP7의 모든 컨트롤 항목에서 방법. 이 해시 코드를 사용하여 항목을 전기적으로 사용할 수 있습니까? 예를 들어 장치에서 사진이나 노래를 듣고 위치를 확인하고 싶습니다. 특정 항목에 지정된 해시 코드가 고유 한 경우 수행 할 수 있습니다.
hashCode가 무엇인지 설명하고 getHashCode()
사용할 수 있습니까?
MSDN은 사실 :
해시 코드는 동등성 테스트 중에 개체를 소비하는 데 사용되는 숫자 값입니다. 컬렉션의 개체에 대한 고급 역할을 할 수도 있습니다.
GetHashCode 메서드는 해시 알고리즘 및 해시 테이블과 같은 데이터 구조를 사용 적합합니다.
GetHashCode 메서드의 기본 구현은 다른 개체에 대해 고유 한 반환 값을 보장하지 않습니다. 또한 .NET Framework는 GetHashCode 메서드의 기본 구현을 보장하지 않고 반환되는 값은 다른 버전의 .NET Framework간에 동일합니다. 따라서이 메소드의 기본 구현을 해싱 목적으로 고유 한 오브젝트 ID로 사용합니다.
GetHashCode 메서드는 파생 형식으로 재정의 할 수 있습니다. 해당 유형에 포함 된 해시 함수를 제공하고 해시 테이블에 유용한 경우를 제공하는 값 유형이 메소드를 대체해야합니다. 고유성을 위해 해시 코드는 정적 필드 또는 속성 대신 인스턴스 필드 또는 속성의 값을 기반으로해야합니다.
Hashtable 개체에서 키로 사용되는 개체도 GetHashCode 메서드를 재정의해야합니다. 따라서 자체적으로 코드를 생성해야합니다. 키로 사용 된 개체가 GetHashCode의 유용한 개체 구현을 제공하지 않을 때 사용 된 해시 테이블 개체가 생성 될 때 코드 공급자를 얻을 수 있습니다. .NET Framework 버전 2.0 이전에는 해시 코드 공급자가 System.Collections.IHashCodeProvider 인터페이스를 기반으로했습니다. 버전 2.0부터 해시 코드 공급자는 System.Collections.IEqualityComparer 인터페이스를 기반으로합니다.
기본적으로 해시 코드는 해시 테이블을 가능하게하기 위해 존재합니다.
두 개의 객체는 동일한 해시 코드를 갖습니다.
두 개의 동일하지 않은 객체는 동일하지 않은 해시 코드 (충돌이라고 함)를 수 없습니다 .
그것이 무엇인지 배우고있는 유추를 통해 더 간단한 설명을 작성 희망적으로 생각했습니다.
누군가를 고유하게 생각하는 해시 코드를 생각하십시오.
나는 형사를 찾아 형사입니다. 우리는 그를 잔인한 사람이라고 부릅시다. (내가 어렸을 때 그는 악명 높은 살인자였다. 그는 악명 높은 살인자였다. 그는 집으로 침입하여 가난한 소녀를 살해하고 몸을 보니 항상 헐겁습니다. Cruel은 사람들의 바다에서 그를 고유하게 이미지하는 데 사용할 수있는 특별한 특성을 가지고 있습니다. 호주에는 2,500 명의 명의 명의 사람들이 있습니다. 그들 중 하나는 잔인입니다. 우리는 어떻게 당신의 진단을받을 수 있습니까?
잔인한 사람을 노출하는 나쁜 방법
분명히 잔인은 파란 눈을 가지고 있습니다. 호주 인구의 거의 절반이 파란 눈을 가지고 있기 때문에 그다지 도움이됩니다.
잔인한 사람을 많이하는 좋은 방법
다른 무엇을 사용할 수 있습니까? 나는 알고있다 : 나는 지문을 사용할 것이다!
장점 :
- 두 사람이 같은 지문을 나가는 것은 정말 어렵습니다 (불가능하지만 극히 가능성은 낮음).
- Cruel의 지문은 절대 바뀌지 않습니다.
- Cruel의 모든 존재의 모든 부분 : 외모, 머리 색깔, 성격, 식습관 등이 (이상적으로는) 동생이있는 경우 (매우 유사하지만 동일하지 않은 경우) 지문에 (이상적으로) 반영되어야합니다. 해야 우리 이 서로 다른 지문을. 우리는 지문을 두 사람이 지문을 두 사람이 100 % 보장 할 수 없기 때문에 "해야한다"고 보증합니다.
- 그러나 우리는 항상 잔인한 씨가 항상 같은 지문을 가지고 있고 그의 지문이 절대 바뀌지 않을 것을 항상 보장 할 수 있습니다.
위의 특성은 일반적으로 좋은 해시 함수를 만듭니다.
'충돌'과의 거래는 무엇입니까?
Cruel의 지문과 일치하는 사람이 리드를 얻습니다. 이것이 내가 잔인한 것을 찾았다는 의미입니까?
........ 혹시! 좀 더 자세히 살펴 봐야합니다. SHA256 (해싱 함수)을 사용하고 5 명만있는 작은 마을을 찾고 있다면 가능한 좋은 기회가 있습니다! 그러나 MD5 (또 다른 유명한 해싱 함수)를 사용하고 + 2 ^ 1000 명의 사람들이있는 마을에서 지문을 확인하는 경우 완전히 다른 두 사람이 지문을 번잡 할 가능성이 있습니다.
어쨌든이 모든 것의 이점은 무엇입니까?
해시 코드의 유일한 장점은 해시 테이블에 테이블을 사용하여 때-해시 테이블을 사용하여 빨리 찾고 싶을 때-해시 코드가 곳입니다. 해시 테이블에서 물건을 빨리 사용할 수 있습니다. 성능을 향상시키는 향상 만 높음은 낮지 만 해킹입니다.
호주에 2,500 만 명의 용의자가있는로 가득 찬 해시 테이블이 사람들 가정 해봅시다. 미스터 잔인 어딘가에 ..... 어떻게 빨리 찾을 수 있을까요? 우리는 중복을 모두 정리해야합니다 : 일치 인 일치를 찾거나 외장 인 용의 튼튼한 사로 잡기. 시간이 너무 오래 걸리기 때문에 각 사람의 고유 한 특성을 고려하고 싶지 않습니다. 대신 무엇을 사용 하시겠습니까? 해시 코드를 사용하십시오! 해시 코드는 두 사람이 다른지 알려줍니다. Joe Bloggs가 잔인하지 않은지 여부 지문이 일치하지 잔인한 것이 아닙니다. 당신이 지문 이 일치하면 그리고 당신이 당신이 당신의 남자를 이미 상당히 좋습니다. 그러나 100 %는 아닙니다. 당신이 확신 할 수있는 유일한 방법은 다음을 더 조사하는 것입니다 : (i) 기회 / 부여를 검증 받았습니다, (ii) 증인 등.
두 개체의 해시 코드 값이 동일한 컴퓨터를 사용하는 경우 다시 동일한 지 확인해야합니다. 예를 들어있는 것과 일치하는지, 무게 등이 같은지, 정수가 같은지 또는 customer_id가 일치하는지 확인한 다음 동일한 지 여부를 판단해야합니다. 이것은 일반적으로 IComparer 또는 IEquality 인터페이스를 구현하여 수행합니다.
주요 요약
기본적으로 해시 코드는 지문입니다.
- 이론적으로 서로 다른 두 사람 / 물체가 여전히 동일한 지문을 가질 수 있습니다. 또는 다른 말로. 동일한 지문이 두 개있는 경우 ......... 둘 다 같은 사람 / 물체에서 올 필요는 없습니다.
- Buuuuuut, 같은 사람 / 물체 는 항상 같은 지문을 반환합니다 .
- 즉, 두 개체가 서로 다른 해시 코드를 반환 하면 해당 개체가 다르다는 것을 100 % 확실하게 알 수 있습니다.
위의 내용을 살펴 보려면 3 분 정도 걸립니다. 이해할 수있을 때까지 몇 번 읽어보세요. 내가 모든 것을 배우는 데 많은 슬픔이 있었기 때문에 이것이 누군가에게 도움이되기를 바랍니다!
GetHashCode()
객체를 해시 테이블의 키로 사용하는 것을 지원하는 데 사용됩니다. (Java 등에 비슷한 것이 존재합니다). 목표는 모든 객체가 고유 한 해시 코드를 반환하는 것이지만 이는 종종 절대적으로 보장 할 수 없습니다. 그것은되어 필요한 두 개의 논리적으로 동일한 개체가 반환하지만 같은 해시 코드를.
일반적인 해시 테이블 구현은 hashCode 값으로 시작하여 모듈러스 (따라서 범위 내에서 값 제한)를 가져와 "버킷"배열에 대한 인덱스로 사용합니다.
WP7에 고유 한 것이 아니라 모든 .Net 개체에 존재합니다. 그것은 당신이 설명하는 것과 비슷하지만 고유하다는 보장이 없기 때문에 앱에서 고유 식별자로 권장하지 않습니다.
이것은 msdn 기사의 내용입니다.
https://blogs.msdn.microsoft.com/tomarcher/2006/05/10/are-hash-codes-unique/
"사람들이 해시 코드가 주어진 입력에 대해 고유 한 값을 생성한다는 말을들을 수 있지만 사실은 달성하기 어렵지만 동일한 값으로 해시하는 두 개의 서로 다른 데이터 입력을 찾는 것이 기술적으로 가능하다는 것 입니다. 그러나 사실입니다. 해시 알고리즘의 효과에 관한 결정 요인은 생성 된 해시 코드의 길이와 해시되는 데이터의 복잡성에 있습니다. "
따라서 데이터 크기에 적합한 해시 알고리즘을 사용하면 고유 한 해시 코드를 갖게됩니다.
참고 URL : https://stackoverflow.com/questions/7425142/what-is-hashcode-used-for-is-it-unique
'IT' 카테고리의 다른 글
MATLAB 함수의 일부 반환 값을 우아하게 무시하는 방법은 무엇입니까? (0) | 2020.07.21 |
---|---|
지원 (v21) 사용하여 환경 설정 화면 만들기 (0) | 2020.07.21 |
Genymotion, "VirtualBox 엔진을로드 할 수 없습니다." (0) | 2020.07.21 |
Mockito의 예외를 조롱하고 주장하는 방법? (0) | 2020.07.21 |
jquery에서 배경색을 설정하는 방법 (0) | 2020.07.21 |