hash表中的元素:
public class Item<K, V>
{
private K key;
private V value;
public Item(K key, V value)
{
this.key = key;
this.value = value;
}
public K getKey()
{
return key;
}
public void setKey(K key)
{
this.key = key;
}
public V getValue()
{
return value;
}
public void setValue(V value)
{
this.value = value;
}
@Override
public int hashCode()
{
return key.hashCode();
}
}
hash表实现:
public class HashTable<K, V>
{
private Item<K, V>[] items;
private int len;
public HashTable(int size)
{
this.items = new Item[size];
this.len = items.length;
}
public V put(K key, V value)
{
int hashAddr = key.hashCode() % len;
Item<K, V> item = new Item<K, V>(key, value);
if (items[hashAddr] == null)
{
items[hashAddr] = item;
return null;
} else
{
int i = 0;
for (; items[(hashAddr + i) % len] != null; i++)
{
// 取得当前元素
Item<K, V> curr = items[(hashAddr + i) % len];
// 替换
if (curr.getKey().equals(key))
{
V result = curr.getValue();
items[(hashAddr + i) % len] = item;
return result;
} else
{
// 已经走了一圈,退出
if ((hashAddr + i + 1) % items.length == hashAddr)
{
System.out.println("空间已满,【" + item.getKey() + "," + item.getValue() + "】 插入失败!");
return null;
}
}
}
items[(hashAddr + i) % items.length] = item;
return null;
}
}
public V get(K key)
{
int hashAddr = key.hashCode() % len;
for (int i = 0; items[(hashAddr + i) % items.length] != null; i++)
{
// 取得当前元素
Item<K, V> curr = items[(hashAddr + i) % len];
if (curr.getKey().equals(key))
{
return curr.getValue();
} else if ((hashAddr + i + 1) % items.length == hashAddr)
{
System.out.println("找了一圈未找到");
return null;
}
}
return null;
}
public V remove(K key)
{
int hashAddr = key.hashCode() % len;
for (int i = 0; items[(hashAddr + i) % items.length] != null; i++)
{
// 取得当前元素
Item<K, V> curr = items[(hashAddr + i) % len];
if (curr.getKey().equals(key))
{
items[(hashAddr + i) % len] = null;
return curr.getValue();
} else if ((hashAddr + i + 1) % items.length == hashAddr)
{
System.out.println("找了一圈未找到");
return null;
}
}
return null;
}
public static void main(String[] args)
{
HashTable<String, String> h = new HashTable<String, String>(5);
System.out.println(h.put("a", "测试a"));
System.out.println(h.put("a", "测试b"));
System.out.println(h.put("e", "测试e"));
System.out.println("-----------------------------");
System.out.println(h.remove("a"));
System.out.println(h.get("a"));
System.out.println(h.get("e"));
}
}
分享到:
相关推荐
哈希表 哈希表.java Java对哈希表的操作
在Java中,我们通常使用`HashMap`类来实现哈希表,但这里提到的是自定义实现哈希表的Java代码。这个压缩包包含三个文件:`HashTable.java`、`Info.java`和`TestHashTable.java`,分别代表哈希表的实现、存储的数据...
Java数据结构 线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构
### Java哈希表性能优化 #### 一、引言 随着现代软件开发中对高性能数据结构的需求日益增加,Java作为一种广泛应用的编程语言,其内置的数据结构优化变得尤为重要。Java的`java.util`包中提供了多种数据结构,其中...
在Java中,`HashTable`是早期版本(Java 1.0)提供的一种线程安全的哈希表实现。尽管现在已经被`HashMap`所替代,但理解`HashTable`的工作原理和特性仍然对深入理解Java集合框架以及数据结构有重要意义。 哈希表的...
在这个名为"Java_Datastructure.rar"的压缩包中,我们主要关注的是"java 哈希"和"java 哈希表"的相关知识。 哈希,也称为散列,是一种快速查找数据的方法,它通过计算一个叫做哈希函数的过程将任意长度的输入(也...
### Java中的哈希表:深度解析与应用 #### 关于哈希:压缩映射与高效检索 哈希,又称散列,是一种将任意长度的输入转换为固定长度输出的算法,这一过程通常被称为`hashcode = hash(key)`。在Java中,哈希表通过...
哈希表,也被称为散列表,是计算机科学中一种非常重要的数据结构,它提供了...无论是编程语言的内置数据结构,如Python的dict或Java的HashMap,还是在数据库系统、缓存机制等应用场景中,哈希表都是不可或缺的一部分。
拉链法哈希表是一种常见的数据结构,广泛应用于各种编程语言,包括Java。在这个场景中,我们看到一个基于Java的课程设计项目,它利用拉链法实现了一个哈希表,用于电话查询系统的功能。让我们深入了解一下这个主题。...
Java 中的 HashTable 类就是一种常用的哈希表实现。 在实际应用中,哈希表的实现需要考虑到许多因素,如哈希函数的设计、哈希冲突的解决、存储空间的分配等。只有当哈希表的设计和实现都非常完善时,才能发挥哈希...
数据结构(Java语言描述) 单元设计_单元8 哈希表.doc 学习资料 复习资料 教学资源
在网上倒是有一些网友自己写的哈希表 但是都不是很满意。像“闪电哈希”,“scripting.Dictionary”对象 伪哈希 。不是速度太慢 就是功能不全 。本哈希类为模仿java中 jdk哈希表。只是处理冲突键时,一直使用的...
总结来说,这个Java哈希表演示程序会向我们展示如何在实际应用中使用哈希表,包括哈希函数的使用、冲突的处理(可能采用链地址法)、以及可能结合`Swing`创建的GUI界面来直观呈现操作。同时,它也可能涉及到了`...
哈希表,也被称为散列表,是数据结构中一种高效的数据存储和检索工具。它通过哈希函数将数据的关键字映射到一个固定大小的数组中,使得在平均情况下,查找、插入和删除操作的时间复杂度可以达到O(1)。这种高效的性能...
5. **源代码实现**:在实际编程中,哈希表的实现通常涉及C++、Java或Python等语言。在实现时,需要考虑内存管理、线程安全、性能优化等问题。例如,Java中的`HashMap`和C++中的`unordered_map`都是内置的哈希表实现...
数据结构学习笔记(5)——使用draw.io绘制的映射、哈希表和跳跃表图,详细绘制了映射、哈希表和跳跃表图,使用draw.io——免费开源的画图工具。
4. 常见的哈希表实现:在实际编程中,C++中的`std::unordered_map`、Java中的`HashMap`以及Python的`dict`都是基于哈希表实现的高效容器。这些数据结构提供了高效的插入、删除和查找操作,广泛应用于软件开发的各个...
Java哈希表,也称为散列表,是一种高效的数据结构,用于存储键值对。它通过哈希函数将键转换为数组的索引,从而能够快速访问数据,平均时间复杂度为O(1)。在Java中,`java.util.Hashtable`类是实现哈希表的一种方式...
在实际编程中,常见的哈希表实现如Python的内置`dict`类型、Java的`HashMap`以及C++的`std::unordered_map`,它们都提供了高效的键值对操作。这些库通常已经优化了哈希函数和冲突解决策略,使用者无需关心底层细节。...
哈希表是一种高效的数据结构,它通过特定的哈希函数将键...例如,Python中的`dict`类型、Java的`HashMap`和C++的`std::unordered_map`都是哈希表的典型实现。理解哈希表的工作原理和优化策略对于提升程序性能至关重要。