一次性根据这些字符串的值计算哈希码的最佳方法是什么?好的,我的意思是它需要:1-快速:我需要获取大量短字符串列表(10^3..10^8项)的哈希码。2-识别整个数据列表如此多的列表可能只有几个不同的字符串必须有不同的哈希码如何用Java实现?也许有一种方法可以使用现有的字符串哈希码,但是如何合并为单独的字符串计算的许多哈希码?谢谢。 最佳答案 为您的字符串创建一个占位符类,然后使用CRC32class.它简单快速:importjava.util.zip.CRC32;publicclassHugeStringCollection{pr
我正在尝试开发一个在彩虹表生成器中使用的缩减函数。缩减函数背后的基本原理是它接受一个散列,执行一些计算,并返回一个特定长度的字符串。目前我正在使用SHA1哈希,我需要返回一个长度为三的字符串。我需要由以下任意三个随机字符组成的字符串:abcdefghijklmnopqrstuvwxyz0123456789我面临的主要问题是我编写的任何归约函数总是返回已经生成的字符串。一个好的归约函数只会很少返回重复的字符串。任何人都可以就实现此目标的方法提出任何想法吗?或者任何关于哈希到字符串操作的建议都会很棒。提前致谢乔希 最佳答案 听起来您需要
假设我需要在Hashset中存储1000个对象,我有1000个包含每个对象的桶(通过为每个对象生成唯一的哈希码值)还是有10个大约包含100个对象的桶更好?拥有独特桶的优势之一是我可以节省调用equals()方法的执行周期?为什么设置一定数量的桶并在其中尽可能均匀地分配对象很重要?理想的对象与桶的比例应该是多少? 最佳答案 Whyisitimportanttohavesetnumberofbucketsanddistributetheobjectsamoungthemasevenlyaspossible?HashSet应该能够平均在
这个问题在这里已经有了答案:HowdoIprintmyJavaobjectwithoutgetting"SomeType@2f92e0f4"?(13个答案)关闭7年前。我正在处理一个示例,其中它使用ArrayList包含新实例并使用Collections.sort()方法使用可比较的接口(interface)。我不知道为什么它在排序时会打印出哈希码,也不知道我的代码中的错误在哪里。任何人都可以找出错误并详细解释我。SortFruitObject.javaimportjava.util.*;publicclassSortFruitObject{publicstaticvoidmain(S
我有两个对象列表,用户和产品用户拥有产品,每个产品关联到1个用户但是一个产品类型可以是多个并且由不同的用户拥有用户:Ed、Rob产品:古柯、雪碧(1)、雪碧(2)、啤酒Ed有Coca和Sprites(1)、RobSprites(2)和啤酒我需要为每个唯一(用户+产品)生成一个id这可能不是一个好主意user.hashCode()+product.hashCode()什么是继续进行的好方法? 最佳答案 如果用户和产品都创建伪随机散列码,您的hashCode并没有那么糟糕。如果您担心由于user或product中的错误hashCode实
我一直在学习OCJP(以前的SCJP),我遇到了以下使用LinkedHashSet的示例:publicclassTest{intsize;publicTest(ints){this.size=s;}@Overridepublicbooleanequals(Objectobj){return(this.size==((Test)obj).size);}publicstaticvoidmain(String[]args){LinkedHashSets=newLinkedHashSet();s.add(newTest(1));s.add(newTest(2));s.add(newTest(1
我以前从未使用过序列化。我想除了我的“Q”大小写转换的最后一部分外,其他都没有问题。publicclassTest{publicstaticvoidmain(Stringargs[]){Storestore=newStore();FileOutputStreamfos;ObjectOutputStreamoos=null;try{fos=newFileOutputStream(newFile("table.obj"));oos=newObjectOutputStream(fos);}catch(IOExceptione1){e1.printStackTrace();}这继续包含更多代码
我在Java中有一个哈希表,如下所示,我正在尝试获取具有最小值的键。显然我可以遍历所有元素来找到它,但是有没有更简单的方法来做到这一点?Hashtablehash=newHashtable(); 最佳答案 使用哈希表,不。但是您可以改用TreeMap.ARed-BlacktreebasedNavigableMapimplementation.Themapissortedaccordingtothenaturalorderingofitskeys,orbyaComparatorprovidedatmapcreationtime,dep
Strings1="String1";System.out.println(s1.hashCode());//returnanintegeri1Fieldfield=String.class.getDeclaredField("value");field.setAccessible(true);char[]value=(char[])field.get(s1);value[0]='J';value[1]='a';value[2]='v';value[3]='a';value[4]='1';System.out.println(s1.hashCode());//returnsameval
我正在实现一个系统,其中我有一个姓名列表,每个人都有1个电话号码。我需要能够输入姓名并查找电话号码,或者输入电话号码并查找姓名。我知道我可以通过两个哈希表来做到这一点-一个从姓名到电话号码,另一个从电话号码到姓名。然后我可以在O(1)时间内向任一方向查找。然而,这似乎是我存储了太多数据-每个姓名和每个电话号码都存储了两次。有什么方法可以更有效地做到这一点?我应该使用什么数据结构来存储姓名和电话号码?如果相关的话,我正在用Java编码。非常感谢! 最佳答案 Java不提供开箱即用的双向哈希表。依赖于两个哈希表的解决方案已经很好了,除非