Java 一个简单Hashtable的实现
2008-09-17 14:14
786 查看
如图,是Hashtable采用的链表式的结构,即键值冲突的时候直接加到此键值对应的链表后面。下面提供一个简单的Java类的实现。
public class HashTableDef {
private int capacity = 1000;// 非重复的键值个数,即键值从0-999,可以在初始话的时候指定
private Map[] keys;// 存放键值所对应的key-value对
/**
* 默认容量的构造函数,默认容量为1000
*/
public HashTableDef() {
keys = new Map[capacity];
for (int i = 0; i < capacity; i++) {
keys[i] = null;
}
}
/**
* 带容量的构造函数
*
* @param cy
*/
public HashTableDef(int cy) {
this.capacity = cy;
keys = new Map[this.capacity];
for (int i = 0; i < capacity; i++) {
keys[i] = null;
}
}
/**
* 把键值对key-value放到hash表中
*
* @param key
* @param value
*/
public void put(Object key, Object value) {
int keyIndex = key.hashCode() % capacity;// 得到此键对应的键值
boolean isSameKey = false;
Map map = new Map();
map.key = key;
map.value = value;
Map currentMap = keys[keyIndex], prevMap = null;
if (currentMap == null) {
// 当前键值没有冲突,
keys[keyIndex] = map;
System.out.println("直接放入到hashtable中" + keys[keyIndex] + " "
+ currentMap);
} else {
// 处理键值冲突,放到此键值对应的链表的最后
while (currentMap != null) {
// 不光是键值冲突,而且键相等,此时此时覆盖以前的键对应的键值
if (currentMap.key.equals(key) || currentMap.key == key) {
currentMap.value = value;
isSameKey = true;
System.out.println("出现了同名的Key:" + key);
break;
}
prevMap = currentMap;
currentMap = currentMap.next;
}
if (isSameKey == false) {
System.out.println("放到链表中");
prevMap.next = map;
}
}
}
/**
* 给定键值,取得此键值对应的Value,如果没有,返回null
*
* @param key
* 键值
* @return
*/
public Object get(Object key) {
int keyIndex = key.hashCode() % capacity;// 得到此键对应的键值
Map currentMap = keys[keyIndex];
// 遍历此键值对应的入口链表
while (currentMap != null) {
// 出现相等的键,则返回
if (currentMap.key.equals(key) || currentMap.key == key) {
return currentMap.value;
}
currentMap = currentMap.next;
}
return null;
}
private class Map {
public Object key;
public Object value;
public Map next = null;
}
}
相关文章推荐
- 一个简单的线程池实现(java版)
- java基础之实现一个简单的数组
- Java实现一个简单的RPC框架(七) 反射机制调用类函数
- Java实现一个简单的两人五子棋游戏(一) 系统设计
- Java实现一个简单的两人五子棋游戏(四) 落子动作的实现
- 用java实现简单的网络通信,相当于一个最简单的控制台qq(附代码) 推荐
- 简单完整的代码,通过这个代码你将对RSA加密算法在Java中的实现方法有一个初步的了解,这个类,你可以直接使用,水平高的,就自己修改完善下代码。
- Java实现一个简单的缓存
- 利用JAVA的动态属性之反射原理实现一个简单AOP容器 - AOP的实现原理分析
- 使用Java实现一个最简单的Web Server
- java实现简单的hashTable
- Java实现一个简单的Web服务器
- java中自己实现一个服务端对应多个客户端的简单代码
- JAVA编写的一个简单的Socket实现的HTTP响应服务器
- 归并排序 一个简单的java实现
- MyBatis在eclipse环境下搭建+“Java+Mysql+Mybatis实现一个简单的图书信息录入”
- 一个简单限速器的java实现[2]
- Java实现一个简单的缓存方法
- JAVA实现一个简单的代数运算语言编译器(二)--词法分析准备