Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中实现哈希函数?_Java_Algorithm_Hash - Fatal编程技术网

如何在Java中实现哈希函数?

如何在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<

我使用了一个数组作为散列表,用于使用值对alogrithm进行散列:

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程序中使用它,我在我的帖子中添加的任何信息都可能是错误的。我知道那个内置类,但是我试着为学习和实践目的建立自己的班级。我知道那个内置班级,但我试着为学习和实践目的建立自己的班级。