草庐IT

哈希表(HashTable)

全部标签

java - 为什么HashMap的初始容量是16(2的幂),Hashtable的初始容量是11(素数)?

知道的请说明原因。我用Google搜索了一下,但没有找到解释清楚的答案。当您的hashCode为负时,是否使存储桶的索引为正? 最佳答案 对于HashMap,存储Map条目的数组中的索引是这样计算的(其中h是根据hashCode键):staticintindexFor(inth,intlength){returnh&(length-1);}其中length是数组的长度。这仅在length是2的幂时有效。如果length不是2的幂,则必须将此代码更改为效率较低的返回h%长度。 关于java

java - Freemarker:迭代哈希中的嵌套列表

我想迭代一个嵌套在一个Map中的List,数据结构是这样的:Map>groups=newTreeMap()//Somecodeelsetoputvaluesintogroups...自由标记模板:${groupKey}//It'sOKhere.//Exceptionthrewhere,detailmessageispastedbelow${item}详细异常消息:FreeMarkertemplateerror:For"...[...]"left-handoperand:Expectedasequenceorstringorsomethingautomaticallyconvertibl

Java:最简单的整数哈希

我需要一个快速的整数散列函数:inthash(intn){return...;}Java中是否已经存在一些东西?我需要的最少属性是:hash(n)&1在与一堆连续的n值一起使用时不会出现周期性。hash(n)&1为0或1的可能性大致相等。 最佳答案 HashMap,以及Guava的基于hash的utilities,在hashCode()结果上使用以下方法来改善位分布并防御较弱的哈希函数:/**ThismethodwaswrittenbyDougLeawithassistancefrommembersofJCP*JSR-166Expe

java - 完善的哈希函数和好处

考虑这个类:publicfinalclassMyDate{privateintyear,month,day;publicMyDate(intyear,intmonth,intday){this.year=year;this.month=month;this.day=day;}//Somestuff@OverridepublicinthashCode(){return((year这是一个完美的哈希函数,因为在内存中我们有:因此,在红色中,5位存储日(1到31),在黄色中,4位存储月(1到12),其他存储年(1到16777215)。完美的hashFunction有什么好处?据我所知,它可以

从根到叶:深度理解哈希表

​​​​​​​一.哈希表的概念关于查找元素时:在顺序结构以及平衡树中,元素关键码与其存储位置之间没有对应的关系,因此在查找一个元素时,必须要经过关键码的多次比较。顺序查找时间复杂度为O(N),平衡树中为树的高度,即O(log2N),搜索的效率取决于搜索过程中元素的比较次数。理想的搜索方法:可以不经过任何比较,一次直接从表中得到要搜索的元素。如果构造一种存储结构,通过某种函数(hashFunc)使元素的存储位置与它的关键码之间能够建立一一映射的关系,那么在查找时通过该函数可以很快找到该元素。哈希表(HashTable:哈希表是一种使用哈希函数进行键值映射的数据结构,它将键(key)和值(valu

java - Java/Scala 中的高性能字符串哈希函数

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭去年。Improvethisquestion在Java/Scala中寻找高性能字符串散列函数-比MurmurHash家族的函数更快的东西,不需要加密强度高,只需要分布良好。有什么建议吗?

Java 从哈希码重新创建字符串

有什么方法可以在java中使用字符串的哈希码,并重新创建该字符串?例如像这样:StringmyNewstring=StringUtils.createFromHashCode("HelloWorld".hashCode());if(!myNewstring.equals("HelloWorld"))System.out.println("Hmm,somethingwentwrong:"+myNewstring);我这样说是因为我必须将一个字符串转换为一个整数值,并从该整数值重建该字符串。 最佳答案 这是不可能的。String的哈希码

java - 正如 Joshua Bloch 在有效 Java 中所建议的那样,缓存哈希码如何在 Java 中工作?

我有以下来自JoshuaBloch的effectivejava的代码(第9项,第3章,第49页)Ifaclassisimmutableandthecostofcomputingthehashcodeissignificant,youmightconsidercachingthehashcodeintheobjectratherthanrecalculatingiteachtimeitisrequested.Ifyoubelievethatmostobjectsofthistypewillbeusedashashkeys,thenyoushouldcalculatethehashcode

java - TreeSet/TreeMap 等同于 HashSet/HashMap(自定义哈希)

TreeSet有一个带有比较器的构造函数,这意味着即使您存储的对象不是Comparable对象本身,您可以提供自定义比较器。有无序集的类似实现吗?(例如HashSet的替代方案采用“散列器”对象计算可能与对象自身实现不同的对象T的equals()和hashCode()?)C++std::hash_set给你这个,只是想知道是否有Java的东西。编辑:@Max提出了关于equals()的一个很好的技术观点-很公平;TreeMap也是如此和HashMap键通过Map.containsKey().但是是否还有其他众所周知的数据结构允许通过自定义散列器进行组织? 最

java - 当 hashcode() 实现返回常量值时,为什么哈希表会退化为链表?

//Theworstpossiblelegalhashfunction-neveruse!@OverridepublicinthashCode(){return42;}It’slegalbecauseitensuresthatequalobjectshavethesamehashcode.It’satrociousbecauseitensuresthateveryobjecthasthesamehashcode.Therefore,everyobjecthashestothesamebucket,andhashtablesdegeneratetolinkedlists.Programs