//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会退化成为一个链表 这是一个极端的情况
}
}
哈希码: