字符串的hashCode
String类型,只要值相同,那么hashCode一定相同。
public static int hashCode (byte [] value) { int h = 0 ; int length = value.length >> 1 ; for (int i = 0 ; i < length; i++) { h = 31 * h + getChar(value, i); } return h; }
这里是String hashCode的源码,其中value是String类内部维护的字符数组。
可以看出,字符数组的值一样,则hashCode就相同。
即equals方法相同的两个String,hashCode一定相同。
所以这里应用了散列?
Objects.hash()方法
当我们自定义类,想要重写hashCode方法时,可以通过Objects.hash()来实现。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 class Employee { private String name; private int age; Employee(String name, int age){ this .name = name; this .age = age; } @Override public int hashCode () { return Objects.hash(name, age); } @Override public boolean equals (Object o) { if (o == null ) return false ; if (o instanceof Employee){ Employee e = (Employee) o; return this .name.equals(e.name) && this .age == e.age; } else { return false ; } } @Override public String toString () { rturn name + " " + age; } }