一、哈希表:查询速度非常快。

1,哈希表的结构 : 数组 + 链表 + 红黑树 (jdk1.8后) 。数组,链表,红黑树解析

hash值 java list 求 java的hash值_hash值 java list 求

2.结构解析:

1.数组,按哈希值是否相同分组,
2.链表,哈希值相同的元素用链表吊在一个数组元素下面,
3.红黑树,如果吊在下面的链表长度大于8 ,则链表转化为红黑树,增加查询速度。

二、哈希值

1.什么是哈希值?

哈希值是一个10进制的int 类型的数(用来模拟地址,不是物理实际的地址)

2.如何获得哈希值?

Object 总类有一个 object.hashCode() 方法获得哈希值,

哈希值和地址值的联系?

1.地址值的最后面就是哈希值的十六进制的表示,这里有些抽象,等下看代码。
2.Object类下的toString()源码。日常sout 类的时候打印的地址(如果没有重写toString方法的 话)

public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());

三、代码

package Java学习.Java高级.数据结构.哈希表;


/**
 * 一、哈希表数据结构:
 * 1.什么是哈希表呢?  在jdk1.8之前,哈希表是由 数组+链表构成 ,同一个hash值的连表狗储存在一个链表里,
 * 但是当 hash值的元素较多时候,key值的查找效率 依次降低,
 * 2.在jdk1.8之后 :   哈希表采用 数组 + 链表 + 红黑树 实现,当
 * 链表长度超过 8 时,将链表转为红黑树大大减少了查找的时间,
 * 二 、哈希值:
 * 1,什么是哈希值?  哈希值是一个10进制的int 类型的数(用来模拟地址,不是物理实际的地址)
 * 2.如何获得?     Object 有一个方法 ,hashCode()返回对象的哈希值
 * 二、地址值和哈希值的联系: 地址值就是的后面就是哈希值的十六进制形式,
 * 1.源码 toString()
 * public String toString() {
 * return getClass().getName() + "@" + Integer.toHexString(hashCode());
 * 三、字符串String类型重写了Object类的hashCode()方法,
 * 1.重地和通话的 hashCode()值 一致
 * 2,重写hashCode()想返回多少都可以
 */
public class 哈希值 {
    public static void main(String[] args) {
        Object object = new Object();
        Object object2 = new Object();
        System.out.println("object的哈希值: " + object.hashCode());
        System.out.println("object2的哈希值: " + object2.hashCode());

        System.out.println("object的对象地址: " + object);
        System.out.println("object2的对象地址: " + object2);
        //三、String类重写了hashCode()方法
        String s = new String("123");
        String s2 = new String("123");
        System.out.println("s的hashCode(): " + s.hashCode());
        System.out.println("s2的hashCode(): " + s2.hashCode());
        System.out.println("重地的hashCode(): " + "重地".hashCode());
        System.out.println("通话的hashCode(): " + "通话".hashCode());
        System.out.println("我们可以得出重地的hashCode() 和 通话的hashCode()一致这是一个特殊的情况");


    }
}

输出:
object的哈希值: 1915910607
object2的哈希值: 824909230
object的对象地址: java.lang.Object@723279cf
object2的对象地址: java.lang.Object@312b1dae
s的hashCode(): 48690
s2的hashCode(): 48690
重地的hashCode(): 1179395
通话的hashCode(): 1179395
我们可以得出重地的hashCode() 和 通话的hashCode()一致这是一个特殊的情况

Process finished with exit code 0