`
夜神月
  • 浏览: 24959 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

java自写哈希表

阅读更多
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 Java对哈希表的操作

    哈希表java代码

    在Java中,我们通常使用`HashMap`类来实现哈希表,但这里提到的是自定义实现哈希表的Java代码。这个压缩包包含三个文件:`HashTable.java`、`Info.java`和`TestHashTable.java`,分别代表哈希表的实现、存储的数据...

    Java数据结构 线性表,链表,哈希表是常用的数据结构

    Java数据结构 线性表,链表,哈希表是常用的数据结构,在进行Java开发时,JDK已经为我们提供了一系列相应的类来实现基本的数据结构

    Java哈希表性能优化

    ### Java哈希表性能优化 #### 一、引言 随着现代软件开发中对高性能数据结构的需求日益增加,Java作为一种广泛应用的编程语言,其内置的数据结构优化变得尤为重要。Java的`java.util`包中提供了多种数据结构,其中...

    哈希表-使用Java开发的哈希表-HashTable.zip

    在Java中,`HashTable`是早期版本(Java 1.0)提供的一种线程安全的哈希表实现。尽管现在已经被`HashMap`所替代,但理解`HashTable`的工作原理和特性仍然对深入理解Java集合框架以及数据结构有重要意义。 哈希表的...

    Java_Datastructure.rar_java 哈希_java 哈希表

    在这个名为"Java_Datastructure.rar"的压缩包中,我们主要关注的是"java 哈希"和"java 哈希表"的相关知识。 哈希,也称为散列,是一种快速查找数据的方法,它通过计算一个叫做哈希函数的过程将任意长度的输入(也...

    Java中的哈希表

    ### Java中的哈希表:深度解析与应用 #### 关于哈希:压缩映射与高效检索 哈希,又称散列,是一种将任意长度的输入转换为固定长度输出的算法,这一过程通常被称为`hashcode = hash(key)`。在Java中,哈希表通过...

    哈希表相关操作实现

    哈希表,也被称为散列表,是计算机科学中一种非常重要的数据结构,它提供了...无论是编程语言的内置数据结构,如Python的dict或Java的HashMap,还是在数据库系统、缓存机制等应用场景中,哈希表都是不可或缺的一部分。

    拉链法哈希表的设计与实现

    拉链法哈希表是一种常见的数据结构,广泛应用于各种编程语言,包括Java。在这个场景中,我们看到一个基于Java的课程设计项目,它利用拉链法实现了一个哈希表,用于电话查询系统的功能。让我们深入了解一下这个主题。...

    哈希表的原理 数据结构

    Java 中的 HashTable 类就是一种常用的哈希表实现。 在实际应用中,哈希表的实现需要考虑到许多因素,如哈希函数的设计、哈希冲突的解决、存储空间的分配等。只有当哈希表的设计和实现都非常完善时,才能发挥哈希...

    数据结构(Java语言描述) 单元设计_单元8 哈希表.doc

    数据结构(Java语言描述) 单元设计_单元8 哈希表.doc 学习资料 复习资料 教学资源

    易语言高性能哈希表模块和例程

    在网上倒是有一些网友自己写的哈希表 但是都不是很满意。像“闪电哈希”,“scripting.Dictionary”对象 伪哈希 。不是速度太慢 就是功能不全 。本哈希类为模仿java中 jdk哈希表。只是处理冲突键时,一直使用的...

    哈希表java实现及简单演示

    总结来说,这个Java哈希表演示程序会向我们展示如何在实际应用中使用哈希表,包括哈希函数的使用、冲突的处理(可能采用链地址法)、以及可能结合`Swing`创建的GUI界面来直观呈现操作。同时,它也可能涉及到了`...

    数据结构 哈希表 哈希算法

    哈希表,也被称为散列表,是数据结构中一种高效的数据存储和检索工具。它通过哈希函数将数据的关键字映射到一个固定大小的数组中,使得在平均情况下,查找、插入和删除操作的时间复杂度可以达到O(1)。这种高效的性能...

    哈希表的设计与实现.rar

    5. **源代码实现**:在实际编程中,哈希表的实现通常涉及C++、Java或Python等语言。在实现时,需要考虑内存管理、线程安全、性能优化等问题。例如,Java中的`HashMap`和C++中的`unordered_map`都是内置的哈希表实现...

    映射、哈希表和跳跃表.drawio

    数据结构学习笔记(5)——使用draw.io绘制的映射、哈希表和跳跃表图,详细绘制了映射、哈希表和跳跃表图,使用draw.io——免费开源的画图工具。

    哈希表-浙大数据结构课件

    4. 常见的哈希表实现:在实际编程中,C++中的`std::unordered_map`、Java中的`HashMap`以及Python的`dict`都是基于哈希表实现的高效容器。这些数据结构提供了高效的插入、删除和查找操作,广泛应用于软件开发的各个...

    JAVA哈希表.pdf

    Java哈希表,也称为散列表,是一种高效的数据结构,用于存储键值对。它通过哈希函数将键转换为数组的索引,从而能够快速访问数据,平均时间复杂度为O(1)。在Java中,`java.util.Hashtable`类是实现哈希表的一种方式...

    数据结构中哈希表的实现代码

    在实际编程中,常见的哈希表实现如Python的内置`dict`类型、Java的`HashMap`以及C++的`std::unordered_map`,它们都提供了高效的键值对操作。这些库通常已经优化了哈希函数和冲突解决策略,使用者无需关心底层细节。...

    哈希表实现简单说明-附代码

    哈希表是一种高效的数据结构,它通过特定的哈希函数将键...例如,Python中的`dict`类型、Java的`HashMap`和C++的`std::unordered_map`都是哈希表的典型实现。理解哈希表的工作原理和优化策略对于提升程序性能至关重要。

Global site tag (gtag.js) - Google Analytics