草庐IT

手撕HashMap(二)

全部标签

java - 谁能解释一下 java 是如何设计 HashMap 的 hash() 函数的?

这个问题在这里已经有了答案:ExplanationofHashMap#hash(int)method(2个答案)关闭7年前。看了JDK的源码,觉得HashMap的hash()函数很好玩。它的源代码是这样的:staticinthash(inth){//ThisfunctionensuresthathashCodesthatdifferonlyby//constantmultiplesateachbitpositionhaveabounded//numberofcollisions(approximately8atdefaultloadfactor).h^=(h>>>20)^(h>>>12

java - 使用 HashMap 存储实例变量?

我想创建一个基类,我程序中的所有类都将扩展该基类。我想做的一件事是找到一种统一的方式来存储对象内的所有实例变量。我想到的是使用HashMap来存储对象的键/值对,然后通过get和set方法公开这些值。到目前为止,我拥有的代码如下:packageocaff;importjava.util.HashMap;publicclassOcaffObject{privateHashMapdata;publicOcaffObject(){this.data=newHashMap();}publicObjectget(Stringvalue){returnthis.data.get(value);}p

java - Java 如何从 HashMap 中获取对象

我正在尝试在给定key时从HashMap获取测试对象的速度,但我不太确定该怎么做。我试过这种方式,但它是错误的:hash.values().getSpeed();有什么帮助吗?谢谢classTest{privateStringid;privateStringname;privateintspeed;publicTest(Stringid,Stringname,intspeed){this.id=id;this.name=name;this.speed=speed;}publicStringgetId(){returnid;}publicStringgetName(){returnnam

java - HashMap 桶中的 IdentityHashCode

在HashMap的实现细节中,我可以看到:Whenusingcomparatorsoninsertion,tokeepa*totalordering(orascloseasisrequiredhere)across*rebalancings,wecompareclassesandidentityHashCodesas*tie-breakers.如果我有常量hashCode和很好的equals而我的类没有实现Comparable它究竟会如何打破关系以及如何会建树吗?我的意思是-桶将转换为树并使用System.identityHashCode打破平局。然后我将尝试使用不同的实例调用cont

java - 使用 Class 作为 HashMap 的键是否会导致不良影响?

考虑以下几点:Map,Object>myMap=newHashMap,Object>();FoofooObject=NewFoo();myMap.put(fooObject.getClass(),fooObject)注意java.lang.Class本身并没有实现hashCode()方法,而是隐式地从java.lang.Object继承了它。我在JDK1.8中验证了这一点。java.lang.Class用作java.util.HashMap的键是否安全?myMap.get(Foo.class)是否总是返回我输入的值,如myMap.put(fooObject.getClass(),foo

java - 使用双键创建 HashMap

我正在为我的问题寻找合适的数据结构。我希望能够使用两个键尽可能高效地选择节点对象。插入和删除也需要高效。基本上每个节点对象都有一对两个键。这些对是唯一的,但各个key不是。我需要能够为两个键之一选择具有特定值的一组节点。示例:节点1有键a1和b1节点2有键a1和b2节点3有keya2和b2例如,我希望能够选择具有键a1、b1的节点以及具有b2作为键2的所有节点。我当然可以制作两个HashMap(每个键一个),但这是一种丑陋的解决方案,因为当我添加或删除某些内容时,我必须在两个映射中都这样做。由于将进行大量添加和删除操作,因此我宁愿一次完成。有人对如何执行此操作有任何想法吗?显然,将两个

java - 使用对象或整数作为 HashMap 键更好吗?

对象的散列在java的HashMap中是如何工作的?我在想,与字符串相比,使用整数作为键是否更有效,或者它是否无关紧要。如果我有:Stringstr="hello";ObjecthelloObject=newObject();如果是String,什么更好?使用整数键:HashMaphashes=newHashMap();hashes.put(str.hashCode(),helloObject);还是使用字符串键?HashMaphashes=newHashMap();hashes.put(str,helloObject);从插入的角度和从搜索的角度来看,什么更有效率?

java - 添加到 HashMap 上的列表值

我正在填充一个HashMap,让我的对象按其属性之一分组。我发现在将我的对象添加到列表(值)之前检查列表(值)是否存在是“丑陋的”。一个例子会更明确://NeedamaptogroupPersonbyage.//Person={age:int}Map>myHashMap=newHashMap();for(Personperson:persons){intage=person.getAge();ListpersonsOfSameAge=myHashMap.get(age);if(personsOfSameAge!=null){personsOfSameAge.add(person);}e

java - 使用JSTL如何将 "put"一个值放入HashMap

我希望仅使用JSTL设置HashMap的键值对。这可能吗?我知道如何检索键值对,但我还没有找到设置它们的方法。如有任何帮助,我们将不胜感激。使用JSTL检索HashMap键/值对的示例:... 最佳答案 您可以使用. 关于java-使用JSTL如何将"put"一个值放入HashMap,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8750213/

java - "power of 2"在 java.util.HashMap 实现中的意义

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:JavaHashMapDefaultInitialCapacity我正在阅读java.util.HashMap中HashMap的实现。初始容量、最大容量等都是2的幂。从java.util.HashMap复制的部分声明/***Thedefaultinitialcapacity-MUSTbeapoweroftwo.*/staticfinalintDEFAULT_INITIAL_CAPACITY=16;/***Themaximumcapacity,usedifahighervalueisimplicitlyspec