JAVA hash Code() 덮어쓰기
equals () 를 다시 쓰더라도 HashSet은remove () 할 수 없습니다
사이트 축소판 그림
hashCode 덮어쓰기()
▪️Test54.javaimport java.util.*;
public class Test54 {
public static void main(String[] args) {
Set<Hero54> list = new HashSet<Hero54>();
Hero54 h1 = new Hero54();
h1.name = "ミナト";
list.add(h1);
System.out.println("要素数=" + list.size());
h1 = new Hero54();
h1.name = "ミナト";
list.remove(h1);
System.out.println("要素数=" + list.size());
}
}
▪️Hero54.javaimport java.util.*;
public class Hero54 {
private int hp;
public String name;
public boolean equals(Object o) {
if (o == this)
return true;
if (o == null)
return false;
if (!(o instanceof Hero54))
return false;
Hero54 r = (Hero54) o;
if (!this.name.trim().equals(r.name.trim())) {
return false;
}
return true;
}
public int hashCode() {
int result = 37;
result = result * 31 + name.hashCode();
result = result * 31 + hp;
return result;
}
}
▪️Test54.java 실행 결과
요소 = 1
요소 수 = 0
hashCode()를 덮어쓰기 전에
▪️Hero54.javaimport java.util.*;
public class Hero54 {
private int hp;
public String name;
public boolean equals(Object o) {
if (o == this)
return true;
if (o == null)
return false;
if (!(o instanceof Hero54))
return false;
Hero54 r = (Hero54) o;
if (!this.name.trim().equals(r.name.trim())) {
return false;
}
return true;
}
}
▪️Test54.java 실행 결과
요소 = 1
요소 = 1
hashSet 표시
• 중복 허용 안 함
• 기본적으로 순서 관계가 없다
hashCode()의 덮어쓰기 예 ②
▪️Test55.java hashCode()의 덮어쓰기 예 ②import java.util.*;
public class Test55 {
public static void main(String[] args) {
Set<Cat55> cat = new HashSet<Cat55>();
Cat55 c1 = new Cat55();
c1.name = "ねこ";
Cat55 c2 = new Cat55();
c2.name = "ねこ2";
Cat55 c3 = new Cat55();
c3.name = "ねこ3";
cat.add(c1);
cat.add(c2);
cat.add(c3);
System.out.println(c1);
System.out.println(cat.size());
cat.remove(c2);
System.out.println(cat.size());
}
}
▪️Cat55.java hashCode()의 덮어쓰기 예 ②public class Cat55 {
private int cp;
public String name;
public boolean equals(Object o) {
if (o == this)
return true;
if (o == null)
return false;
if (!(o instanceof Cat55))
return false;
Cat55 f = (Cat55) o;
if (!this.name.trim().equals(f.name.trim())) {
return false;
}
return true;
}
public int hashCode() {
int catResult = 13;
catResult = catResult * 31 + name.hashCode();
catResult = catResult * 31 + cp;
return catResult;
}
}
즉 "hashCode는 equals가 정말 똑같다고 일치된 견해를 가지고 있다"고 말했다.해시코드가 일치하지 않으면 원래 equals는 평가를 받지 않는다.
▪️Test55.java hashCode () 의 재작성 예시 ② 실행 결과
Cat55@bbd407
3
2
▪️보태다
Cat55.javapublic class Cat55 {
public int cp;
public String name;
public boolean equals(Object o) {
if (this.name == o) {
return true;
}
return false;
}
public int hashCode() {
int catResult = 13;
catResult = catResult * 31 + name.hashCode();
catResult = catResult * 31 + cp;
return catResult;
}
}
결과도 마찬가지다
Reference
이 문제에 관하여(JAVA hash Code() 덮어쓰기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/icelandnono/items/bdcd7eecd19ddcd0fc86
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import java.util.*;
public class Test54 {
public static void main(String[] args) {
Set<Hero54> list = new HashSet<Hero54>();
Hero54 h1 = new Hero54();
h1.name = "ミナト";
list.add(h1);
System.out.println("要素数=" + list.size());
h1 = new Hero54();
h1.name = "ミナト";
list.remove(h1);
System.out.println("要素数=" + list.size());
}
}
import java.util.*;
public class Hero54 {
private int hp;
public String name;
public boolean equals(Object o) {
if (o == this)
return true;
if (o == null)
return false;
if (!(o instanceof Hero54))
return false;
Hero54 r = (Hero54) o;
if (!this.name.trim().equals(r.name.trim())) {
return false;
}
return true;
}
public int hashCode() {
int result = 37;
result = result * 31 + name.hashCode();
result = result * 31 + hp;
return result;
}
}
▪️Hero54.java
import java.util.*;
public class Hero54 {
private int hp;
public String name;
public boolean equals(Object o) {
if (o == this)
return true;
if (o == null)
return false;
if (!(o instanceof Hero54))
return false;
Hero54 r = (Hero54) o;
if (!this.name.trim().equals(r.name.trim())) {
return false;
}
return true;
}
}
▪️Test54.java 실행 결과요소 = 1
요소 = 1
hashSet 표시
• 중복 허용 안 함
• 기본적으로 순서 관계가 없다
hashCode()의 덮어쓰기 예 ②
▪️Test55.java hashCode()의 덮어쓰기 예 ②import java.util.*;
public class Test55 {
public static void main(String[] args) {
Set<Cat55> cat = new HashSet<Cat55>();
Cat55 c1 = new Cat55();
c1.name = "ねこ";
Cat55 c2 = new Cat55();
c2.name = "ねこ2";
Cat55 c3 = new Cat55();
c3.name = "ねこ3";
cat.add(c1);
cat.add(c2);
cat.add(c3);
System.out.println(c1);
System.out.println(cat.size());
cat.remove(c2);
System.out.println(cat.size());
}
}
▪️Cat55.java hashCode()의 덮어쓰기 예 ②public class Cat55 {
private int cp;
public String name;
public boolean equals(Object o) {
if (o == this)
return true;
if (o == null)
return false;
if (!(o instanceof Cat55))
return false;
Cat55 f = (Cat55) o;
if (!this.name.trim().equals(f.name.trim())) {
return false;
}
return true;
}
public int hashCode() {
int catResult = 13;
catResult = catResult * 31 + name.hashCode();
catResult = catResult * 31 + cp;
return catResult;
}
}
즉 "hashCode는 equals가 정말 똑같다고 일치된 견해를 가지고 있다"고 말했다.해시코드가 일치하지 않으면 원래 equals는 평가를 받지 않는다.
▪️Test55.java hashCode () 의 재작성 예시 ② 실행 결과
Cat55@bbd407
3
2
▪️보태다
Cat55.javapublic class Cat55 {
public int cp;
public String name;
public boolean equals(Object o) {
if (this.name == o) {
return true;
}
return false;
}
public int hashCode() {
int catResult = 13;
catResult = catResult * 31 + name.hashCode();
catResult = catResult * 31 + cp;
return catResult;
}
}
결과도 마찬가지다
Reference
이 문제에 관하여(JAVA hash Code() 덮어쓰기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/icelandnono/items/bdcd7eecd19ddcd0fc86
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
import java.util.*;
public class Test55 {
public static void main(String[] args) {
Set<Cat55> cat = new HashSet<Cat55>();
Cat55 c1 = new Cat55();
c1.name = "ねこ";
Cat55 c2 = new Cat55();
c2.name = "ねこ2";
Cat55 c3 = new Cat55();
c3.name = "ねこ3";
cat.add(c1);
cat.add(c2);
cat.add(c3);
System.out.println(c1);
System.out.println(cat.size());
cat.remove(c2);
System.out.println(cat.size());
}
}
public class Cat55 {
private int cp;
public String name;
public boolean equals(Object o) {
if (o == this)
return true;
if (o == null)
return false;
if (!(o instanceof Cat55))
return false;
Cat55 f = (Cat55) o;
if (!this.name.trim().equals(f.name.trim())) {
return false;
}
return true;
}
public int hashCode() {
int catResult = 13;
catResult = catResult * 31 + name.hashCode();
catResult = catResult * 31 + cp;
return catResult;
}
}
public class Cat55 {
public int cp;
public String name;
public boolean equals(Object o) {
if (this.name == o) {
return true;
}
return false;
}
public int hashCode() {
int catResult = 13;
catResult = catResult * 31 + name.hashCode();
catResult = catResult * 31 + cp;
return catResult;
}
}
Reference
이 문제에 관하여(JAVA hash Code() 덮어쓰기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/icelandnono/items/bdcd7eecd19ddcd0fc86텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)