- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
根据 Javadocs IdentityHashMap
,它说
This class implements the
Map
interface with a hash table, using reference-equality in place of object-equality when comparing keys (and values). In other words, in anIdentityHashMap
, two keys k1 and k2 are considered equal if and only if(k1==k2)
. (In normalMap
implementations (likeHashMap
) two keys k1 and k2 are considered equal if and only if(k1==null ? k2==null : k1.equals(k2))
.)
据我所知,指向不同内存位置的两个不同对象仍然可以具有相同的哈希码,因此 object1.equals(object2)
可以返回 true
。但是,对于 object1 == object2
,指向不同内存位置的两个不同对象永远不会返回 true
。
问题 1 - 当 IdentityHashMap
严格依赖引用相等性时,这是否意味着永远不会发生冲突?
问题 2 - 调试以下代码向我展示了总共 6 个桶,键和值都存储在不同的桶中。但是 HashMap
就不是这样了,key 和 value 存储在同一个 bucket 中。
因为它的名称中有一个'hash'字,所以它必须对键进行哈希处理,那么为什么它要分开存储键和值以及它如何检索给定键的值?
String A = "abc";
String B = "def";
String C = new String("abc");
Map<String, String> map1 = new IdentityHashMap<String, String>();
map1.put(A, "123");
map1.put(B, "345");
map1.put(C, "567");
最佳答案
IdentityHashMap
不使用键的 hashCode
,而是使用它们的 System.identityHashCode
。虽然如果您有大量内存,这种身份哈希码可能会发生冲突,但这种情况很少见。这当然不会阻止两个 key 最终出现在同一个桶中,因为桶的数量通常远小于 2^32 - 1。
关于java - IdentityHashMap 是否接受碰撞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12779113/
我使用java.util.IdentityHashMap进行了测试,请参阅 public class IdentityHashMapTest{ public static void main(
根据 Javadocs IdentityHashMap,它说 This class implements the Map interface with a hash table, using refe
谁能告诉IdentityHashMap的重要用例是什么? 最佳答案 当您希望您的 key 不通过 equals 而是通过 == 进行比较时,您可以使用 IdentityHashMap。如果您要进行大量
/** * Returns index for Object x. */ private static int hash(Object x, int length) { int h = S
我有一个简单的 IdentityHashmap: IdentityHashmap map; 现在我想使用字符串作为键。主要问题是 java 字符串池: String a = "Hello"; Stri
在某些情况下,map 中使用的键对象不会覆盖 Object 中的 hashCode() 和 equals(),例如,使用 socket Connection 或 java.lang.Class 作为键
我一直在浏览 IdentityHashMap 的文档.那个类(class)有一个constructor这需要 expectedmaxsize。 public IdentityHashMap(int e
在 IdentityHashMap 类的默认构造函数中,调用了一个私有(private)的 init() 方法,使默认大小为 64。 请在下面找到代码: private static final in
我需要一个 HashMap(1) 通过对象引用匹配键,以及(2) 迭代时保持插入顺序 这些功能分别在 IdentityHashMap 和 LinkedHashMap 中实现。 有什么方法可以得到适合我
特别是当它们与移动垃圾收集器一起使用时。对象的当前内存位置无法使用,因为它可能会在下一次收集时发生变化,那么对象哈希使用什么? 最佳答案 希望这个问题对您有所帮助:How does the JVM e
正如我们所知,在 java 集合框架中,Map 中的每个类都使用 Chaining 来解决冲突,但 IdentityHashMap 使用对其进行线性探测。 如果你看 java 文档,它已经提到: Fo
据我了解,以下代码应打印 false,因为它正在执行基于 identity 的比较。 但是,当我运行以下代码时,它正在打印 true: public class Test1 { public st
我知道 IdentityHashMap ,但我需要使用类似 "IdentitySet" 的东西(使用 equals 作为 o1 == o2 )。我将使用一个“提取器”( JavaFX )来收听 Obs
我正在创建 3 个同一类的对象:A、B、rB。这里rB指的是B。A和B的值相等。我已经重写了比较值的 equals 方法。 所以 A.equals(B), A.equals(rB) and B.equ
我需要一个 Map 实现,它共享 IdentityHashMap 和 WeakHashMap 的属性(引用相等而不是 equals() 和键上的弱引用)。 您推荐哪种实现(它必须在 Android 上
据我所知,C# 中没有直接的等效项。我目前的想法是使用带有自定义 IEqualityComparer 的字典,检查引用是否相等。 然而,这似乎失去了散列所获得的优势。有没有办法从每个不同的对象中获取单
Identity HashMap 是 Java 中的特殊实现,它比较对象引用而不是 equals() 并且还使用 identityHashCode() 而不是 hashCode()。此外,它使用lin
我正在遍历一个数据结构,想要构建一个映射 X->Y 的字典,其中 X 是我正在遍历的数据结构中的一个字段,Y 是我正在构建的数据结构中的一个字段苍蝇。 X 是不可散列的类型。 最佳答案 Java的Id
public static void main(String[] args) { IdentityHashMap m1 = new IdentityHashMap(); Integer
我是一名优秀的程序员,十分优秀!