1.哈希表
1)哈希表是根据key值而直接进行访问的一种数据结构。它通过把key值映射到表中的一个位置来访问记录,用来加快查找速度。这个映射函数成为hash函数,存放记录的数组叫做哈希表。
2)就是把任意长度的输入,通过散列算法变换成固定长度的输出,该输出就是散列值。
2.hashcode
1)在java中,hashCode是jdk根据对象的地址或者字符串或者数字算出来的int类型的数值。它代表着对象的特征、标示。
2)hashCode用来在散列存储结构中确定对象的存储地址。
3)在Object类中如果两个对象equals相等,那么他们的hashCode一定相同;
4)Object类的hashcode方法默认返回的是jvm的引用地址;
5)如果要重写equals方法,那么对象的hashCode方法也应尽量重写;
6)hashCode相同,对象不一定相同;
7)hashCode不同,对象一定不同;
3.hashcode有什么作用
1)提高对象的查找效率
2)先通过hashCode比较,如果相同在通过equals比较;
4.、equal
1)在java中,对于基本数据类型是比较他们的值是否相等;对于引用类型比较两个对象是否相等,即比较他们的引用地址是否相等;
2)Object类中的equals方法默认也是通过判断,如果两个对象引用的同一个地址,则返回true,否则返回false;
4.String类
String类重写了hashCode方法,只要字符串一样,那么得到的hashCode值也一样;
这就解释了为什么2个字符内容相同的String对象,不一定是同一个对象;
5.Object类hashCode的解释
1).每当在执行Java应用程序期间多次在同一对象上调用它时,hashCode方法必须始终返回相同的整数,前提是不修改对象上的equals比较中使用的信息。从应用程序的一次执行到同一应用程序的另一次执行,该整数不需要保持一致。
2).如果两个对象根据equals(Object)方法相等,则对两个对象中的每一个调用hashCode方法必须生成相同的整数结果。
3).如果两个对象根据equals(java.lang.Object)方法不相等,则不需要在两个对象中的每一个上调用hashCode方法必须生成不同的整数结果。但是,程序员应该知道为不等对象生成不同的整数结果可能会提高哈希表的性能。
6)对图中结果的解释
要先搞清楚"123"是什么,"123"是个字符串常量,第一张图的a和bc是false,是因为==比较地址,他们地址不同,第二张图里final c ,c变成常量,你就可以把c看做是"123",所以本质上d=“123”+“4”,所以结果如你所视。
相关文章: