Java 散列表的实现
摘自http://www.cxybl.com/html/suanfa/201110125445.html
有改动
public class MyHashtable {
//表中元素个数
private int manyItems;
private Object[] keys;
private Object[] data;
//若索引i处存在元素,则hasBeenUsed[i]为true,否则为false
private boolean[] hasBeenUsed;
//构造函数
public MyHashtable(int capacity){
if(capacity <= 0){
throw new IllegalArgumentException("capacity is negative!");
}
keys = new Object[capacity];
data = new Object[capacity];
hasBeenUsed = new boolean[capacity];
}
//hash函数
private int hash(Object key){
return Math.abs(key.hashCode()%data.length);
}
//当前索引发生冲突,找下一索引
private int nextIndex(int i){
if(i + 1 == data.length){
return 0;
}else{
return i + 1;
}
}
/*
* 如果在表中找到指定的关键字,返回值为关键字的索引,否则返回-1
* 也就是说如果已经存在某个键时,返回的是该键的索引,如果没有这个键,则返回-1
* 在插入新的键时都返回-1
*/
private int findIndex(Object key){
int count = 0;
int i = hash(key);
System.out.println(i);
while((count<data.length)&&hasBeenUsed[i]){
if(key.equals(keys[i])){
return i;
}else{
count++;
i = nextIndex(i);
}
}
return -1;
}
/*
* 获取某个元素
*/
public Object get(Object key){
int index = findIndex(key);
if(index == -1){
return null;
}
else{
return data[index];
}
}
/*
* 放入某个元素
*/
public Object put(Object key,Object element){
int index = findIndex(key);
Object answer;
//判断索引是不是-1
if(index != -1){
answer = data[index];
data[index] = element;
return answer;
}else if(manyItems<data.length){
index = hash(key);
while(keys[index] != null){
index = nextIndex(index);
}
keys[index] = key;
data[index] = element;
hasBeenUsed[index] = true;
manyItems++;
return null;
}else{
throw new IllegalStateException("Hsahtable is full");
}
}
/*
* 删除某个元素
*/
public Object remove(Object key){
int index = findIndex(key);
Object answer = null;
if(index != -1){
answer = data[index];
data[index] = null;
keys[index] = null;
manyItems--;
}
return answer;
}
/*
* 是否包含某键
*/
public boolean contains(Object key){
return (findIndex(key)!=-1);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MyHashtable table = new MyHashtable(3);
table.put(1, "中国");
Object ob1 = table.put(2, "美国");
table.put(3, "安徽");
System.out.println(table.get(2).toString());
System.out.println(ob1);
}
}
Java 散列表的实现的更多相关文章
- Java学习笔记(二十)——Java 散列表_算法内容
[前面的话] 周末,本来打算找人去玩,结果没找到,所以我只好有学习了. 为什么会学习散列表,因为要使用HashMap?因为在做项目的时候,在服务器和客户端需要传输DTO,而传输的属性是动态增加的,所以 ...
- Java 集合 散列表hash table
Java 集合 散列表hash table @author ixenos 摘要:hash table用链表数组实现.解决散列表的冲突:开放地址法 和 链地址法(冲突链表方式) hash table 是 ...
- 散列表(拉链法与线性探测法)Java实现
package practice; import java.security.Principal; import java.util.Scanner; import edu.princeton.cs. ...
- Java数据结构与算法解析(十二)——散列表
散列表概述 散列表就是一种以 键-值(key-indexed) 存储数据的结构,我们只要输入待查找的值即key,即可查找到其对应的值. 散列表的思路很简单,如果所有的键都是整数,那么就可以使用一个简单 ...
- 【Java】 大话数据结构(13) 查找算法(4) (散列表(哈希表))
本文根据<大话数据结构>一书,实现了Java版的一个简单的散列表(哈希表). 基本概念 对关键字key,将其值存放在f(key)的存储位置上.由此,在查找时不需比较,只需计算出f(key) ...
- Java数据结构和算法(一)散列表
Java数据结构和算法(一)散列表 数据结构与算法目录(https://www.cnblogs.com/binarylei/p/10115867.html) 散列表(Hash table) 也叫哈希表 ...
- 数据结构---散列表查找(哈希表)概述和简单实现(Java)
散列表查找定义 散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,是的每个关键字key对应一个存储位置f(key).查找时,根据这个确定的对应关系找到给定值的key的对应f(key) ...
- 散列表Java实现
package 散列表; import java.util.Scanner; public class HashSearch { public static int data[] = {69,65,9 ...
- 散列表和JAVA中的hash
引文 hello,今天写的数据结构是散列表(hash表),也算是一种基础数据结构了吧.学过计算机的人大概都能说出来这是个以空间换时间的东西,那么具体怎么实现的是今天要讨论的问题. 为什么需要它?主要还 ...
随机推荐
- 第五篇、javascript正则表达式二
一.内容概要 1)创建着呢规则表达式对象的两种方法 2)正则表达式的常用属性和方法 3)string对象常用方法中可以使用正则表达式 4)ES中其他预定义的对象:Math.Date.Number.Bo ...
- 20145210姚思羽《网络对抗》——shellcode注入& Return-to-libc攻击深入
20145210姚思羽<网络对抗>shellcode注入&Return-to-libc攻击深入 shellcode基础知识 Shellcode是一段代码,作为数据发送给受攻击服务器 ...
- shell 比较运算符
运算符 描述 示例 文件比较运算符 -e filename 如果 filename 存在,则为真(不管文件或目录) [ -e /var/log/syslog ] -d filename 如果 fi ...
- 系统安装记录 install OS
上个系统很乱,基本系统是lfs7.7,上面应用都是基于lfs7.9,基本系统是才接触lfs时搭建的,打包保存后一直没怎么使用过,到lfs7.10快出来的时候有段时间有空就拿出来跑了一下,安装了一些软件 ...
- 算法(Algorithms)第4版 练习 1.5.10
Yes, but it could increase the tree height, so the performance guarantee would be invalid.
- linux学习-环境变量与文件查找
- 初学Linux笔记
自动获取IP地址的局域网中,用的是DHCP服务器
- 机器学习(二十四)— 偏差Bias 与方差Variance
1.首先 Error = Bias + Variance Error反映的是整个模型的准确度, Bias反映的是模型在样本上的输出与真实值之间的误差,即模型本身的精准度, Variance反映的是模 ...
- Centos7部署NFS
server1:192.168.1.189 ###客户端 server2:192.168.1.190 ##服务端 1.首先创建共享目录. mkdir -p /data/share 安装nfs ...
- js string.format 方法
String.prototype.format = function(args) { var result = this; if (arguments.length > 0) { if (arg ...