如果我有一个1000的key集,我的哈希表的合适大小是多少,如何确定? 最佳答案 这取决于加载因子(表将增加其大小并重新分配其元素的“满百分比”点)。如果您知道恰好有1000个条目,并且这个数字永远不会改变,您可以将加载因子设置为1.0并将初始大小设置为1000以获得最大效率。如果您不确定确切的大小,您可以将加载因子保留为默认值0.75,并将初始大小设置为1334(预期大小/LF)以获得真正良好的性能,但需要付出一定的代价额外的内存。您可以使用以下构造函数来设置加载因子:Hashtable(intinitialCapacity,fl
我正在发送以下带有查询字符串的url。在查询字符串一个参数“approverCmt”具有哈希值(#)。"/abc/efd/xyz.jas?approverCmt=TransactionLog#459505&batchNm=XS_10APR2015_082224&mfrNm=Timberland"在服务器端,当我试图从我收到的请求中检索它时approverCmt=TransactionLog----->"#459505"ismissingbatchNm=nullmfrNm=null如果我从查询字符串中删除散列(#)或者如果我将#替换为%23一切正常我不明白为什么如果另一个参数包含井号(#
为什么Hashset被称为“哈希”集?我知道我们称之为哈希表或HashMap,因为它是键值存储,当我们put()时,键会被哈希并使用一个好的哈希函数均匀分布。我假设它称为HashSet,因为当我们添加()时,该值被散列并存储以保持其唯一性。但为什么矫枉过正?我们并不真正关心数据的“平均分配”,就像我们在哈希表中所做的那样。 最佳答案 我们确实关心平均分配,因为我们希望我们的基本Collection操作具有恒定的时间性能。为了尊重SET的基本规则,没有两个对象是相等的,我们希望快速找到一个可能相等的匹配项。HashSet是一种相当不错
什么是实现像这样的方法最快和更健壮(就唯一性而言)的方法publicabstractStringhash(String[]values);values[]数组有100到1,000个成员,每个成员只有几十个字符,并且该方法需要在不同的values[上运行大约10,000次/秒]数组每次。应该使用StringBuilder缓冲区构建长字符串,然后对缓冲区内容调用哈希方法,还是继续为values[中的每个字符串调用哈希方法更好?]?显然需要至少64位的散列(例如MD5)来避免冲突,但是有没有更简单、更快的方法可以以相同的质量完成?比如,怎么样publicStringhash(String[]
我有一个java应用程序,我想在其中为字符串生成longid(以便将这些字符串存储在neo4j中)。为了避免数据重复,我想为存储在long整数中的每个字符串生成一个id,每个字符串应该是唯一的。我该怎么做? 最佳答案 此代码将计算出非常好的哈希值:Strings="somestring";longhash=UUID.nameUUIDFromBytes(s.getBytes()).getMostSignificantBits(); 关于java-我如何生成字符串的长散列?,我们在Stack
我正在开发一个内部验证用户身份的小型网络应用程序。一旦用户通过身份验证,我的网络应用程序就会将一些信息(例如用户ID和人名)传递给第三方网络应用程序。第三方开发人员建议我们对值进行散列和加盐处理。请原谅我的无知,但这到底是什么意思?我正在用Java编写应用程序。因此,我打算做的是使用ApacheCommonsDigestUtilsSHA512对用户ID、人名和一些Math.random()值进行散列处理,并将该散列字符串与用户ID和人名一起传递。这是标准做法吗?我也应该将盐传递给第三方,对吗? 最佳答案 盐通常用于安全地存储密码的哈
java.lang.String.hashCode()的JDK文档famously说:ThehashcodeforaStringobjectiscomputedass[0]*31^(n-1)+s[1]*31^(n-2)+...+s[n-1]usingintarithmetic,wheres[i]isthe*i*thcharacterofthestring,nisthelengthofthestring,and^indicatesexponentiation.这个表达式的标准实现是:inthash=0;for(inti=0;i看着这个让我觉得我正在通过我的算法类(class)sleep。
在Java中创建哈希表(或关联数组...)最直接的方法是什么?我的google-fu已经找到了几个例子,但是有没有标准的方法来做到这一点?有没有一种方法可以用键->值对列表填充表,而无需为每个对分别调用对象上的添加方法? 最佳答案 Mapmap=newHashMap();Hashtableht=newHashtable();这两个类都可以从java.util包中找到。2之间的区别在下面解释jGuruFAQentry. 关于java-如何在Java中创建哈希表?,我们在StackOverf
我的searchforahelpertocorrectlycombineconstituenthashcodesforGetHashCode()似乎招来了一些敌意。我从评论中得到的印象是,一些C#开发人员认为您不应该经常覆盖GetHashCode()-当然,一些评论者似乎认为帮助获得正确行为的库是无用的。对于JavacommunitytoaskforittobeaddedtotheJDK,此类功能在Java中被认为足够有用。,它是nowinJDK7.在C#中是否有一些根本原因不需要-或者绝对不应该-覆盖GetHashCode()(以及相应的Equals())作为经常像在Java中一样?
谁能解释这些常量的意义以及选择它们的原因?staticinthash(inth){//ThisfunctionensuresthathashCodesthatdifferonlyby//constantmultiplesateachbitpositionhaveabounded//numberofcollisions(approximately8atdefaultloadfactor).h^=(h>>>20)^(h>>>12);returnh^(h>>>7)^(h>>>4);}来源:java-se6库 最佳答案 理解什么是好的哈希函