【文件属性】:
文件名称:Java基于散列表实现的(无序)词典结构(算法源码)
文件大小:2KB
文件格式:RAR
更新时间:2013-02-10 09:29:48
java,散列表,无序词典结构算法,算法源码
/*
* 基于散列表实现的(无序)词典结构
* 采用分离链策略解决冲突
*/
package dsa;
public class Dictionary_HashTable implements Dictionary {
private Dictionary[] A;//桶数组,每个桶本身也是一个(基于列表实现的)词典结构
private int N;//散列表长
private final double maxLemda = 0.75;//装填因子上限
private int size;//词典结构的规模
private EqualityTester T;//判等器
//默认构造方法
public Dictionary_HashTable()
{ this(0, new EqualityTesterDefault()); }
//构造方法
public Dictionary_HashTable(int n, EqualityTester t) {
T = t;
N = p(n);//桶数组容量取为不小于n的最小素数
A = new Dictionary[N];
for (int i=0; in) n = 3;
n = n | 1;//奇数化
while (!prime(n)) n += 2;
return n;
}
/***************************** ADT方法 *****************************/
//查询词典结构当前的规模
public int getSize()
{ return size; }
//判断词典结构是否为空
public boolean isEmpty()
{ return 0==size; }
//若词典中存在以key为关键码的条目,则返回其中的一个条目;否则,返回null
public Entry find(Object key)
{ return A[h(key)].find(key); }
//返回由关键码为key的条目组成的迭代器
public Iterator findAll(Object key)
{ return A[h(key)].findAll(key); }
//插入条目(key, value),并返回该条目
public Entry insert(Object key, Object value) {
Entry entry = A[h(key)].insert(key, value);//将新条目插至桶A[h(key)]对应的子词典
size ++;//更新规模记录
if (size > N * maxLemda) rehash();//若装填因子过大,则重散列
return entry;//返回null标志
}
//若词典中存在以key为关键码的条目,则将其摘除并返回;否则,返回null
public Entry remove(Object key) {
Entry oldEntry = A[h(key)].remove(key);
if (null!=oldEntry) size--;
return oldEntry;
}
//返回词典中所有条目的一个迭代器
public Iterator entries() {
List L = new List_DLNode();
for (int i=0; i
【文件预览】:
Java基于散列表实现的(无序)词典结构(算法源码)
----Dictionary.java(644B)
----Dictionary_HashTable.java(3KB)