我最近了解了EnumMap在Java中的好处,并想替换现有的ImmutableMap到枚举映射。不过,我也喜欢ImmutableMap提供的不可变属性。guava中是否有变体ImmutableEnumMap可用?在存储方面,哪个(EnumMap与ImmutableMap)性能更好?我找不到两者的比较。如果有人能指出一个链接或就这两种数据结构的效率提供一些见解,我将不胜感激? 最佳答案 Guava贡献者在这里。Guava目前没有ImmutableEnumMap变体,但如果有,它可能只是EnumMap的包装器。(也就是说,更好的不可变实
我们目前正在将Guava用于其不可变集合,但我惊讶地发现他们的map没有方法可以轻松创建只需稍作修改的新map。最重要的是,他们的构建器不允许为键分配新值或删除键。因此,如果我只想修改一个值,这就是我希望能够执行的操作:ImmutableMap>originalMap=/*getthemap*/;ImmutableMap>modifiedMap=originalMap.cloneAndPut(key,value);这是Guava希望我做的事情:ImmutableMap>originalMap=/*getthemap*/;Map>mutableCopy=newLinkedHashMap(
有一些实用方法可以创建ImmutableMap,例如Immutable.of(Key,value)及其重载。但是Maps类中的HashMap或LinkedHashMap不存在这样的方法。有没有更好的方法来做到这一点,或者Guava假设这样的映射始终是一个常量映射,并且ImmutableMap是最好的选择,不需要为HashMap. 最佳答案 你为什么要那些常规的HashMap或LinkedHashMap?你可以这样做:Mapmap=Maps.newHashMap();map.put(key,value);ImmutableMap的问题
在对一些高吞吐量数据结构进行内存基准测试时,我意识到我可以使用ImmutableMap只需进行一点重构。认为这将是一个改进,我将其投入其中,并惊讶地发现它不仅比HashMap慢,而且在单线程环境中它似乎一直更慢,甚至比ConcurrentHashMap!你可以看到fullbenchmark测试的内容非常简单,计算获取map中可能存在的大量随机字符串需要多长时间。publicstaticvoidtimeAccess(Mapmap){Randomrnd=newRandom(seed);intfoundCount=0;longstart=System.nanoTime();for(inti=
这个问题在这里已经有了答案:ImmutablevsUnmodifiablecollection[duplicate](11个回答)关闭8年前。上下文我需要返回对我用于数据缓存的map的引用,并且我想确保没有人可以修改他们的引用。问题我在网上看到很多对UnmodifiableMap和ImmutableMap的引用,但我没有看到任何比较/对比它们的东西。我认为Google/Guava创建自己的版本是有充分理由的-有人可以告诉我它是什么吗? 最佳答案 不可修改的map仍可能发生变化。它只是可修改map上的一个View,通过不可修改map可
假设我正在编写一个应该返回Map的方法.例如:publicMapfoo(){returnnewHashMap();}考虑了一会儿,我决定一旦创建了这个map就没有理由修改它。因此,我想返回ImmutableMap.publicMapfoo(){returnImmutableMap.of();}我应该将返回类型保留为通用Map,还是应该指定返回ImmutableMap?从一方面来看,这正是创建接口(interface)的原因;隐藏实现细节。另一方面,如果我这样保留它,其他开发人员可能会错过这个对象是不可变的这一事实。因此,我不会实现不可变对象(immutable对象)的主要目标。通过最小
Guava为初始化map提供了一个不错的快捷方式。但是,当我的map初始化为九个条目时,我收到以下编译器错误(EclipseIndigo)。ImmutableMap类型中的of(K,V,K,V,K,V,K,V,K,V)方法不适用于论据(字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串,字符串)ImmutableMapmyMap=ImmutableMap.of("key1","value1","key2","value2","key3","value3","key4","value4","key5","