如何在Java中实现哈希函数?
我使用了一个数组作为散列表,用于使用值对alogrithm进行散列:如何在Java中实现哈希函数?,java,algorithm,hash,Java,Algorithm,Hash,我使用了一个数组作为散列表,用于使用值对alogrithm进行散列: int[] arr={4 , 5 , 64 ,432 }; 和数组中具有连续整数的键,如下所示: int keys[]={ 1 , 2 , 3 ,4}; 谁能告诉我,用这些数组位置映射这些整数键的好方法是什么?以下是一种短而好的方法,很少或没有冲突(或更大的值) 提前感谢。有什么理由不使用内置的吗?但您必须使用整数,而不是int java.util.Map myMap = new java.util.HashMap<
int[] arr={4 , 5 , 64 ,432 };
和数组中具有连续整数的键,如下所示:
int keys[]={ 1 , 2 , 3 ,4};
谁能告诉我,用这些数组位置映射这些整数键的好方法是什么?以下是一种短而好的方法,很少或没有冲突(或更大的值)
提前感谢。有什么理由不使用内置的吗?但您必须使用整数,而不是int
java.util.Map myMap = new java.util.HashMap<Integer, Integer>();
java.util.Map myMap=new java.util.HashMap();
既然您想要实现自己的,那么首先通过阅读。在那之后,你就可以学习英语了
包含实现快速哈希图(C++)的有趣链接,(对于java)。
< P>不使用内置的任何原因?但您必须使用整数,而不是int java.util.Map myMap = new java.util.HashMap<Integer, Integer>();
java.util.Map myMap=new java.util.HashMap();
既然您想要实现自己的,那么首先通过阅读。在那之后,你就可以学习英语了
包含实现快速哈希图(C++)的有趣链接,(对于java)。
< P>我假设你正在尝试实现某种哈希表作为练习。否则,您应该只使用java.util.HashMap或java.util.HashTree或类似工具 对于上面给出的一小组值,您的解决方案很好。当您的数据变得更大时,真正的问题就会出现 您已经确定碰撞是不受欢迎的-这是事实。有时,了解一些可能的键可以帮助您设计一个好的哈希函数。有时,您可以假设key类将有一个好的hash()
方法。因为hash()是由对象定义的方法,所以每个类都实现它。如果您能够使用密钥的hash()方法,而不必专门为地图构建新的算法,这将是最整洁的
如果所有整数键的可能性相同,则mod函数将在不同的存储桶中均匀分布它们,从而最小化冲突。但是,如果您知道密钥将连续编号,那么使用列表可能比使用哈希映射更好—这将保证不会发生冲突。我假设您正在尝试实现某种哈希表作为练习。否则,您应该只使用java.util.HashMap或java.util.HashTree或类似工具 对于上面给出的一小组值,您的解决方案很好。当您的数据变得更大时,真正的问题就会出现 您已经确定碰撞是不受欢迎的-这是事实。有时,了解一些可能的键可以帮助您设计一个好的哈希函数。有时,您可以假设key类将有一个好的
hash()
方法。因为hash()是由对象定义的方法,所以每个类都实现它。如果您能够使用密钥的hash()方法,而不必专门为地图构建新的算法,这将是最整洁的
如果所有整数键的可能性相同,则mod函数将在不同的存储桶中均匀分布它们,从而最小化冲突。但是,如果您知道密钥将被连续编号,那么使用列表可能比使用HashMap更好—这将保证不会发生冲突。为自己准备一本关于算法和数据结构的书,并阅读关于哈希表的章节(这也是一个很好的入门点)。这是一个复杂的话题,远远超出了像这样的问答网站的范围
首先,使用数组大小模通常是一个可怕的哈希函数,因为当值是数组大小的倍数或其除数之一时,它会导致大量冲突。它的糟糕程度取决于数组的大小:除数越多,冲突的可能性就越大;当它是一个素数时,它不是太坏(但也不是很好)。给自己买一本关于算法和数据结构的书,并阅读关于哈希表的章节(这也是一个很好的切入点)。这是一个复杂的话题,远远超出了像这样的问答网站的范围
首先,使用数组大小模通常是一个可怕的哈希函数,因为当值是数组大小的倍数或其除数之一时,它会导致大量冲突。它的糟糕程度取决于数组的大小:除数越多,冲突的可能性就越大;当它是一个素数时,它不是太坏(但也不是很好)。你能添加一些代码来演示你需要使用它做什么吗?我需要了解哈希算法,以便在我的java程序中使用它,我在我的帖子中添加的任何信息都可能是错误的。你能添加一些代码来演示你需要使用它做什么吗?我需要理解哈希算法,以便在我的java程序中使用它,我在我的帖子中添加的任何信息都可能是错误的。我知道那个内置类,但是我试着为学习和实践目的建立自己的班级。我知道那个内置班级,但我试着为学习和实践目的建立自己的班级。