Hash算法
HashMap使用Hash算法,所以在解剖HashMap之间,需要先简单的了解Hash算法,Hash算法一般也成为散列算法,通过散列算法将任意的值转化成固定的长度输出,该输出就是散列值,这是一种压缩映射,也就是,散列值的空间远远小于输入的值空间。
简单的说,hash算法的意义在于提供了一种快速存取数据的方法,它用一种算法建立键值与真实值之间的对应关系,(每一个真实值只能有一个键值,但是一个键值可以对应多个真实值),这样可以快速在数组等里面存取数据。5.5亿年前氧浓度升高推动动物的进化
下面我们建立一个HashMap,然后往里面放入12对key-value,这个HashMap的默认数组长度为16,我们的key分别存放在该数组的格子中,每个格子下面存放的元素又是以链表的方式存放元素。
public
static
void
main(String[] args) {
Map map
=
new
HashMap();
map.put(
"
What
"
,
"
chenyz
"
);
map.put(
"
You
"
,
"
chenyz
"
);
map.put(
"
Don't
"
,
"
chenyz
"
);
map.put(
"
Know
"
,
"
chenyz
"
);
map.put(
"
About
"
,
"
chenyz
"
);
map.put(
"
Geo
"
,
"
chenyz
"
);
map.put(
"
APIs
"
,
"
chenyz
"
);
map.put(
"
Can't
"
,
"
chenyz
"
);
map.put(
"
Hurt
"
,
"
chenyz
"
);
map.put(
"
you
"
,
"
chenyz
"
);
map.put(
"
google
"
,
"
chenyz
"
);
map.put(
"
map
"
,
"
chenyz
"
);
map.put(
"
hello
"
,
"
chenyz
"
);
}
当我们新添加一个元素时,首先我们通过Hash算法计算出这个元素的Hash值的hashcode,通过这个hashcode的值,我们就可以计算出这个
新元素应该存放在这个hash表的哪个格子里面,如果这个格子中已经存在元素,那么就把新的元素加入到已经存在格子元素的链表中。
运行上面的程序,我们对HashMap源码进行一点修改,打印出每个key对象的hash值
What-->hash值:8
You-->hash值:3
Don't-->hash值:7
Know-->hash值:13
About-->hash值:11
Geo-->hash值:12
APIs-->hash值:1
Can't-->hash值:7
Hurt-->hash值:1
you-->hash值:10
google-->hash值:3
map-->hash值:8
hello-->hash值:0
计算出来的Hash值分别代表该key应该存放在Hash表中对应数字的格子中,如果该格子已经有元素存在,那么该key就以链表的方式依次放入格子中
分享到:
相关推荐
使用Java语言,根据单链表、双链表、堆、栈、二叉树的原理,编写相关代码。实现ArrayListy与LinkedList,理解Hash算法的原理。
java 集合和泛型 1. Map接口 2. HashMap底层实现 3. Hash数据结构和算法 4. 红黑树数据结构和算法
数据结构与算法分析java版 Table of Contents Data Structures and Algorithms in Java - 4 Introduction - 7 Part I Chapter 1 - Overview - 11 Chapter 2 - Arrays - 29 Chapter 3 - Simple Sorting -...
数据结构与算法分析(Java版英文)目录 PartI Chapter1-Overview Chapter2-Arrays Chapter3-Simple Sorting PartII Chapter4--Stacks and Queues Chapter5-linked lists Chapter^-Recursion...
最快的排序算法 javahash实现-Java-哈希算法-最快的实现,排序算法数据结构
数据结构常用算法c++实现,程序目录如下: Array shuffle Prime test(trial division) Prime test(Miller-Rabin's method) 2D Array Arbitary Integer Linear congruential generator Maximum subarray problem Bit...
[Cambridge University Press] 数据结构算法教程 (C# 实现) (英文版) [Cambridge University Press] Data Structures and Algorithms Using C# (E-Book) ☆ 图书概要:☆ C# programmers: No more translating ...
53.java Fig10_63.java HashFamily.java IntCell.java KdTree.java LeftistHeap.java MaxSumTest.java MemoryCell.java MyArrayList.java MyLinkedList.java PairingHeap.java QuadraticProbingHashTable.java ...
1.3 算法形式规范 1.4 数据抽象 1.5 性能分析 1.6 性能度量 1.7 参考文献和选读材料 第2章 数组和结构 2.1 数组 2.2 数组的动态存储分配 2.3 结构体和联合体 2.4 多项式 2.5 稀松矩阵 2.6 多维数组的表示...
JAVA相关技术实现,文件流操作,常用的设计模式,数据结构实现,算法应用和案例,JAVA8一些新特性新功能(Lambda用法,Steam API用法),一致性hash算法代码实现,ELK集成,Hadoop HDFS实现等.zip
算法的书籍Table of ContentsData Structures and Algorithms in Java - 4Introduction - 7Part IChapter 1 - Overview - 11Chapter 2 - Arrays - 29Chapter 3 - Simple Sorting - 63Part IIChapter 4 - Stacks and ...
数据结构与算法 数据结构与队列 package: queue 数组模拟队列 package: sparse(表示稀疏数组) 链表 pakage: linked 栈 package: stack 哈希表(散列) hash是一种数据结构 value = hash(key) 哈希值 = 散列函数...
Data Structures and Algorithms in Java - 4 Introduction - 7 Part I Chapter 1 - Overview - 11 Chapter 2 - Arrays - 29 Chapter 3 - Simple Sorting - 63 Part II Chapter 4 - Stacks and Queues - 80 Chapter ...
C# programmers: no more translating data structures from C++ or Java to use in your programs! Mike McMillan provides a tutorial on how to use data structures and algorithms plus the first ...
JAVA相关技术实现,文件流操作,常用的设计模式,数据结构实现,算法应用和案例,JAVA8一些新特性新功能(Lambda用法,Steam API用法),一致性hash算法代码实现,ELK集成,Hadoop HDFS实现等
数据结构:⼋⼤数据结构分析 数据结构分类 数据结构是指相互之间存在着⼀种或... 散列数据结构的性能取决于以下三个因素: 哈希函数 哈希表的⼤⼩ 碰撞处理⽅法 哈希表在应⽤中也是⽐较常见的,就如Java中有些集合类
从头到尾彻底解析Hash_表算法
Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...