- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我一直在浏览 IdentityHashMap
的文档.那个类(class)有一个constructor这需要 expectedmaxsize
。
public IdentityHashMap(int expectedMaxSize);
在内部,Java 使用 expectedmaxsize
来计算容量,如下所示:
// Compute min capacity for expectedMaxSize given a load factor of 2/3
int minCapacity = (3 * expectedMaxSize)/2;
在进一步探索中,我发现用户应该传递一个很好的 expectedmaxsize
值,这样 IdentityHashMap
就不会在添加更多元素时调整大小。
将此与 HashMap
进行比较, 及其 constructor接受 initialCapacity
:
public HashMap(int initialCapacity)
……还有一个constructor它接受 loadfactor
和 initialcapacity
:
public HashMap(int initialCapacity, float loadFactor)
...这里是 HashMap
没有关于 initialcapacity
的指南。
很明显,HashMap
和 IdentityHashMap
管理内部数组大小的方式不同。我不明白为什么我们会有这种差异?为什么 IdentityHashMap
不能提供与 HashMap
相同的构造函数?
最佳答案
正如 JB Nizet 所说,各个构造函数 API 的差异是由于设计人员对程序员最容易理解的内容进行了“二次思考”。 (旧方法不必要地暴露了内部设计的各个方面。)
So clearly there is a difference in the way size of internal array is managed in HashMap and IdentityHashMap.
这是一个错误的推论,事实上也不是真的。如果您仔细查看 HashMap
的相应代码和 IdentityHashMap
初始大小和调整大小代码不同,但逻辑基本相同。根据参数确定初始数组大小,然后在达到阈值时将数组大小加倍。 (这是我对代码的阅读……但您可以使用上面的链接自行检查。)
IdentityHashMap
的 javadoc 中遗漏这些东西的原因是不再需要它。在 HashMap
的情况下, Material 必须存在,这样程序员才能知道构造函数参数的含义。简化构造函数参数意味着它们不需要对此进行解释。因此(我推测)他们决定将实际的大小调整机制视为“实现细节”,而不是将其作为“契约(Contract)”的一部分。
关于java - IdentityHashMap 和 expectedmaxsize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15861227/
我使用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
我是一名优秀的程序员,十分优秀!