- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
当从一个集合构造一个HashSet
和一个LinkedHashSet
时,initialCapacity
在默认实现中被设置为不同的值。
哈希集:
public HashSet(Collection<? extends E> c) {
map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16));
addAll(c);
}
链接哈希集:
public LinkedHashSet(Collection<? extends E> c) {
super(Math.max(2*c.size(), 11), .75f, true);
addAll(c);
}
我确信这有一个完全正当的理由,但我没有看到。
最佳答案
根据您向我们展示的代码,以下是 HashSet
和 LinkedHashSet
的规范:
data structure | initial capacity | load factor
HashSet | max(1.333 * size, 16) | 0.75
LinkedHashSet | max(2 * size, 11) | 0.75
在我的脑海中,重新散列 LinkedHashSet 可能比普通 HashSet 的成本更高,因为前者有一个链表贯穿其中,可能还需要重构/重新计算。通过增大初始容量,我们可以避免超出某些典型用例的初始容量。
在Java中,当哈希表数据结构的初始容量超过时,就需要对其进行扩容。除其他事项外,这要求表中的每个条目都需要重新散列到一个新的桶中。这样做的成本在 LinkedHashSet
和普通 HashSet
中应该大致相同。 但是, LinkedHashSet
在扩展容量时有一个额外的要求,因为它维护了一个贯穿条目的链表。此列表可能还需要在此过程中进行重构。因此,我预计 LinkedHashSet
中扩展容量的成本会高于普通 HashSet
。通过为 LinkedHashSet
提供更大的初始容量,我们可以在更长时间内避免这种代价高昂的容量扩展。
关于java - 不同的默认 'initialCapacity' HashSet 和 LinkedHashSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41692230/
我有很多不同类型的对象的LinkedHashSets要从一个java类传递到另一个类,我是否将它们打包到一个更大的对象中(如果可能的话,另一个链接哈希集)或者我只是将它们传递到正常的对象中方式作为参数
有没有一种方法可以对 LinkedHashSet 中的链接进行排序?我知道它保留了添加元素的顺序,但是有没有一种方法可以像链表一样重新排序这些链接,并使其仍然表现出 HashMap 行为? 最佳答案
现有的功能除了保留插入顺序之外,还使用 LinkedHashSet 来存储一组唯一元素。 有一个新要求,要求检索 LinkedHashSet 中已存在的特定元素。即,当尝试添加元素时,该方法应检查
我找到了 3-4 个关于该主题的主题,但它们没有任何帮助,因为我已经尝试了那里的人建议主题开启者的任何内容。它已经在我的代码中了。 // Set the images of users that ow
这个问题已经有答案了: Is there a Collector that collects to an order-preserving Set? (1 个回答) 已关闭 5 年前。 我想以自然顺序
我有一个声明如下的集合 Set orderSet = new LinkedHashSet (); 存储的字符串值是日期和时间约定的组合 orderSet.add(bean.getDate()+","
我一直在将一大块 Java 代码移植到 C++,并且在我离开时不得不实现 LinkedHashSet 之类的东西。我已经使用 Boost 的多索引容器对 LinkedHashSet/Map 进行了合理
我目前正在构建一个 Android 应用程序,在其中显示名人的名言。我有一个主屏幕和另外两个屏幕,其中我显示所有引言,另一个屏幕显示我最喜欢的引言。 因此,当我在 AllQuotesActivity
有 Collections.unmodifiableCollection() 和 Collections.unmodifiableSet() 但没有 Collections.unmodifiableL
我有以下代码: private static class Node { public LinkedHashSet s = new LinkedHashSet(); public N
我正在解决一个问题,我需要存储具有无重复和维护顺序要求的元素。我选择使用 LinkedHashSet 因为它满足了我的两个要求。 假设我有这段代码: LinkedHashSet hs = new L
我正在尝试创建一种搜索算法,将坐标对存储在名为 HashSquareSpec 的包装类中。为了避免重复并保持插入顺序,我将每个 HashSquareSpec 插入到 LinkedHashSet 中。即
LinkedHashSet lHs = new LinkedHashSet(); lHs.add("Beta"); 在编译上面的代码时(tutorialspoint 使用了类似的方法),我得到了错误:
我很好奇是否有人知道为什么我的 LinkHashSet 中的第一个元素似乎允许重复?我正在通过 CodeEval 进行代码挑战,当我输入值 2、2、3、3、3、4、4、4、5、5、6 时,程序的输出显
我有两组 LinkedHashSet 对象,在这个对象中我有其他对象有更多 LinkedHashSet。 我的问题是: equals 方法(默认)是否检查所有内部 HashSets 是否相同?还是我必
构造函数LinkedHashSet(Collection c)假设参数是有序集合,保证其参数的保留顺序?我们如何确定这一点? Javadoc 文档没有说明顺序: Constructs a new li
我有一个简单的问题要问你,我的 Product 类有这样的字段: private Integer id; private String category; private String symbol;
我想存储一个数字列表 1,2,3,4 -(让我们从 List 开始) 我想确保数字是唯一的(好的,很好,Set) 我想保证订单(好的... LinkedHashSet) 我想从列表中获取最后一个元素.
如何遍历 LinkedHashSet 从最后一项到第一项? 最佳答案 如果您想继续使用集合,可以使用以下方法: LinkedHashSet set = ... LinkedList list = ne
我有一个 XML 文件,我需要在其中查找并计算年份标签的出现次数。例如: Found year 2020 10 times. Found year 2017 1 times. Found year 2
我是一名优秀的程序员,十分优秀!