java数据结构 哈希表
来源:互联网 发布:淘宝如何加入亲宝贝 编辑:程序博客网 时间:2024/06/10 05:52
哈希表HashTable提供了快速插入、查找的操作。基于数组实现
(key,value)形式存储
如果key是int型,可以直接根据key值作为数组下标
arr[key];
如果key是字符串,需要编写hashCode函数返回int值
1、对每个字母计算ASCII码求和
public int hashCode(String key){int hashVal=0;for(int i=key.length()-1;i>=0;i--){int letter=key.charAt(i)-96; //a=97;hashVal+=letter;}return hashVal;}
问题:key为bbb,abc,cba的hashCode都是一样的
2、幂连乘
27包括空格+26个字母
public int hashCode(String key){//幂连乘int hashValue=0;int pow27=1;for(int i=key.length()-1;i>=0;i--){int letter=key.charAt(i)-96;hashValue+=letter*pow27;pow27*=27;}return hashValue;}
问题1:key为zhangsan字符串会导致数组arr[]越界
通过压缩可选值方法-->求余
return hashValue%arr.length;
通过使用BigInteger类型解决
public int hashCode(String key){BigInteger hashValue=new BigInteger("0");BigInteger pow27=new BigInteger("1");for(int i=key.length()-1;i>=0;i--){int letter=key.charAt(i)-96;BigInteger letterB=new BigInteger(String.valueOf(letter));hashValue=hashValue.add(letterB.multiply(pow27));pow27=pow27.multiply(new BigInteger(String.valueOf(27)));}//压缩可选值return hashValue.mod(new BigInteger(String.valueOf(arr.length))).intValue();}
压缩可选值,但会出现冲突。
可以使用开放地址法、链地址法
/* * 员工信息类 */public class Info {private String key;private String name;public Info(String key,String name){this.key=key;this.name=name;}public String getKey() {return key;}public void setKey(String key) {this.key = key;}public String getName() {return name;}public void setName(String name) {this.name = name;}}
public class HashTable {private Info[] arr;/* * 默认构造方法 */public HashTable(){arr=new Info[100];}/* * 数组初始化 */public HashTable(int maxSize){arr=new Info[maxSize];}/* * 插入数据:将员工的id号作为索引 */public void insert(Info info){arr[hashCode(info.getKey())]=info;}/* * 查找数据 */public Info find(String key){return arr[hashCode(key)];}/* * 字母的ASCII码求和/幂连乘 */public int hashCode(String key){}}
0 0
- java数据结构 哈希表
- java 数据结构--哈希表
- java数据结构和算法(哈希表)
- Java数据结构和算法:哈希表
- java 数据结构之初探哈希表
- Java数据结构
- JAVA数据结构
- java数据结构
- java数据结构
- JAVA数据结构
- JAVA数据结构
- java数据结构
- java数据结构
- JAVA数据结构
- Java数据结构!!!
- JAVA数据结构
- JAVA数据结构
- JAVA数据结构
- 汇编寻址方式
- 单链表的实现
- 这个项目要多久开发完成?
- swap分区增加
- 第十一周项目1-printchs函数星号图
- java数据结构 哈希表
- 动态规划-矩阵链乘法
- [IOS]隐藏状态栏
- 【jQuery】jQuery实用工具函数
- 汇编指令
- Videos from Embedded Linux Conference 2014
- 用户控件和自定义控件的区别
- Java Collection
- 汇编指令——转移指令