[Java] HashMap底层原理_存放键值对底层过程


//HashMap 底层实现采用了哈希表 这是一种非常重要的数据结构
//哈希表的基本结构就是 数组+链表
/*
* 数组:占用空间连续,查找地址容易,查找速度快,但是增加,删除的效率很低
* 链表:占用空间不连续,寻找地址困难,查找速度慢,但是增加,删除的效率很高
* 哈希表结合了他们两个的优点
* 哈希表中Entey数组中每个节点的内容是 [(hash)(key)(value)(next)]
*
*
* */

哈希码 利用哈希码计算(计算余数)出哈希值根据哈希值 把Entry对象存到数组索引位置
若计算的哈希值相同 则以链表的方式在后面加 (最好使用散列算法而不是计算余数)
如果哈希值每次都是相同的数字,键值对象都会存到数组索引相同的位置,这样的话会形成一个非常长的链表,相当于会发生哈希冲突此时 HashMap会退化成为一个链表 这是一个极端的情况

在这里插入图片描述

import java.util.HashMap;
import java.util.Map;

class Employee{
    private int id;
    private String ename;
    private double salary;
    public Employee(int id,String ename,Double salary){
        super();
        this.id=id;
        this.ename=ename;
        this.salary=salary;
    }

    @Override
    public String toString() {
        return "id:"+id+"ename:"+ename+"salary:"+salary;
    }

    public int getId(){
        return id;
    }
    public void setId(int id){
        this.id=id;
    }
    public String getEname(){
        return ename;
    }
    public void setEname(String ename){
        this.ename=ename;
    }
    public double getSalary(){
        return salary;
    }
    public void setSalary(double salary){
        this.salary=salary;
    }
}
public class MapAndSet {
    public static void main(String[] args) {
    
Employee e1=new Employee(1001,"小人",2000.0);
Employee e2=new Employee(1002,"大人",3000.0);
Employee e3=new Employee(1003,"人",4000.0);

System.out.println(e1.hashCode());//哈希码 利用哈希码计算(计算余数)出哈希值根据哈希值 把Entry对象存到数组索引位置
//若计算的哈希值相同 则以链表的方式在后面加  (最好使用散列算法而不是计算余数)
//如果哈希值每次都是相同的数字,键值对象都会存到数组索引相同的位置,这样的话会形成一个非常长的链表,相当于会发生哈希冲突
//此时 HashMap会退化成为一个链表 这是一个极端的情况
   }
}

哈希码:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值