Java 哈希:它是如何在内部工作的?
这听起来可能是一个非常模糊的问题,但事实并非如此。我已经浏览了维基上的描述,但理解起来并没有多大帮助 我正在寻找一些简单的答案来回答一些比较复杂的话题,比如散列。以下是我的问题:Java 哈希:它是如何在内部工作的?,java,algorithm,data-structures,hash,Java,Algorithm,Data Structures,Hash,这听起来可能是一个非常模糊的问题,但事实并非如此。我已经浏览了维基上的描述,但理解起来并没有多大帮助 我正在寻找一些简单的答案来回答一些比较复杂的话题,比如散列。以下是我的问题: 我们所说的散列是什么意思?它是如何在内部工作的 它遵循什么算法 HashMap、HashTable和HashList之间有什么区别 我们所说的“恒定时间复杂性”是什么意思?为什么散列的不同实现会给出恒定时间操作 最后,为什么在大多数面试问题中询问Hash和LinkedList,测试受访者的知识是否有任何特定的逻辑 我知
HashMap
、HashTable
和HashList
之间有什么区别Hash
和LinkedList
,测试受访者的知识是否有任何特定的逻辑Integer
、String
等)使用不同的算法来计算哈希代码Java没有HashList类。哈希集是一组唯一的值
计算散列不一定是与被散列的值相关的恒定时间。
例如,计算字符串的哈希值涉及到对字符串的迭代,并且对于字符串的大小来说不是常数时间
java.lang.Object
)hashCode()
方法。Modren Java IDE允许生成好的hashCode方法myHashFunction(key:“Rachel”value:“Rachel”)-->10
。该函数可能会为输入“Rachel”返回10,因此假设您有一个大小为100的数组,则存储“Rachel”在索引10处。如果要检索该元素,只需调用GetmyHashFunction(“Rachel”)
,它将返回10。请注意,在本例中,键为“Rachel”,值为“Rachel”但是您可以为该键使用另一个值,例如出生日期或对象。您的哈希函数可能会为两个不同的输入返回相同的内存位置,在这种情况下,如果您实现自己的哈希表,您将发生冲突。您必须处理此问题,可能需要使用链表或其他技术h(k)=k mod n
。例如,如果数组大小为n=100
,并且键为整数k=15
,则h(k)=10
这关系到你在逻辑推理方面有多出色。每个程序员都知道它是最重要的数据结构。我将尝试对哈希及其目的进行简单的解释
int hash(const char* str){
int rez = 0;
for (int i = 0; i < strlen(str); i++)
rez = rez * 37 + str[i];
return rez % NUMBER_OF_PARTITIONS;
};