gpt4 book ai didi

java.util.Map 和 google 缓存实现(com.google.common.cache.Cache)的区别

转载 作者:行者123 更新时间:2023-11-29 03:19:55 25 4
gpt4 key购买 nike

我计划将 Google 的缓存实现 (com.google.common.cache.Cache) 与 java.util.set 一起使用。下面的代码块显示了使用 Set.contains() 检查元素是否存在于集合中的结果。

Set 的元素类型为 java.util.Map 时,实际上是检查 keyValue传递的 map 的 类似于 Set 中的任何元素。所以我的理解是调用 Key 和 Value 对象 equals() 方法来检查是否有任何元素具有相同的值。

另一方面,Google 的实现似乎使用了 obj1==obj2 类型比较。

    final Map<Integer, Integer> map = new HashMap<>();
map.put(1,1);
final Map<Integer, Integer> map2 = new HashMap<>();
map2.put(1,1);

Set<Map<Integer, Integer>> s2 = new HashSet<>();
s2.add(map);
System.out.println("Set.contains() check with a different instance of java.util.Map but same (key,value)=>(1,1): "+s2.contains(map2));


final Cache<Integer, Integer> cache = CacheBuilder.newBuilder().expireAfterWrite(10L, TimeUnit.MINUTES).build();
cache.put(1,1);
final Cache<Integer, Integer> cache2 = CacheBuilder.newBuilder().expireAfterWrite(10L, TimeUnit.MINUTES).build();
cache2.put(1,1);

Set<Cache<Integer,Integer>> s = new HashSet<>();
s.add(cache);
System.out.println("Set.contains() check with a different instance of com.google.common.cache.Cache but same (key,value)=>(1,1): "+s.contains(cache2));

这是上面代码的输出。

Set.contains() check with a different instance of java.util.Map but same (key,value)=>(1,1): true
Set.contains() check with a different instance of com.google.common.cache.Cache but same (key,value)=>(1,1): false

我的问题是:

这是预期的行为还是错误?

或者我是否错过了我执行的测试的任何内容?

如果有人对 Google 的缓存实现有更好的了解,请告诉我这是否是一个已知问题,我将不胜感激。

谢谢。

最佳答案

这是因为 HashMapequal()实现提供深度相等检查,而 guava Cache不提供这个相等的方法,它从 Object 中使用它

关于java.util.Map 和 google 缓存实现(com.google.common.cache.Cache)的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24291928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com