在Java中,当我使用字符串作为Hashmap的键时,与使用字符串哈希码作为HashMap的键时,得到的结果略有不同。
有见识吗?
参考方案
当我使用字符串哈希码作为HashMap中的键时。
您不得使用哈希码本身作为密钥。哈希码并不是唯一的-完全允许两个不相等的值具有相同的哈希码。您应该使用字符串本身作为键。然后,地图将首先比较哈希码(以快速缩小候选匹配项的范围),然后与equals比较以实现真正的字符串相等性。
当然,这是假设您的代码确实是您所提出的问题,例如
HashMap goodMap = new HashMap();
goodMap.put("foo", "bar");
HashMap badMap = new HashMap();
badMap.put("foo".hashCode(), "bar");
如果您的代码确实是这样,只需使用HashMap即可。
从 Object.hashCode() (重点是我)的文档中:
hashCode的一般约定为:
只要在Java应用程序执行期间在同一个对象上多次调用它,hashCode方法就必须始终返回相同的整数,前提是不修改该对象的equals比较中使用的信息。从一个应用程序的执行到同一应用程序的另一执行,此整数不必保持一致。
如果根据equals(Object)方法两个对象相等,则在两个对象中的每个对象上调用hashCode方法必须产生相同的整数结果。
不需要,如果根据equals(java.lang.Object)方法两个对象不相等,则在两个对象中的每个对象上调用hashCode方法必须产生不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同的整数结果可能会提高哈希表的性能。
Java:找到特定字符并获取子字符串 - java
我有一个字符串4.9.14_05_29_16_21,我只需要获取4.9。数字各不相同,所以我不能简单地获得此char数组的前三个元素。我必须找到最正确的.并将其子字符串化直到那里。我来自Python,因此我将展示Python的实现方法。def foobar(some_string): location = some_string.rfind('.&…Java string.hashcode()提供不同的值 - java
我已经在这个问题上停留了几个小时。我已经注释掉所有代码,认为这与数组超出范围有关,但是这种情况仍在发生。我正在尝试使用扫描仪从文件中读取输入,存储数据并稍后使用哈希码获取该数据。但是哈希值不断变化。public static void main(String[] args) { //only prior code is to access data char…Java:正则表达式模式匹配器是否有大小限制? - java
我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)Java:线程池如何将线程映射到可运行对象 - java
试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …JAVA:字节码和二进制有什么区别? - java
java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…