- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为什么在执行以下代码时,HashMap 和 Hashtable 在读取值时具有不同的行为,因为它们都基于相同的哈希码方法(整数哈希码)来存储值,并且这两种结构之间的唯一区别是:线程安全性和允许空键和值:
public static void main(String[] args) {
Hashtable<Integer, String> hashtable = new Hashtable<>();
hashtable.put(4,"4");
hashtable.put(2,"2");
hashtable.put(3,"3");
hashtable.put(8,"8");
System.out.println(hashtable.values());// [8, 4, 3, 2]
HashMap<Integer, String> hashMap = new HashMap<>();
hashMap.put(4,"4");
hashMap.put(2,"2");
hashMap.put(3,"3");
hashMap.put(8,"8");
System.out.println(hashMap.values());// [2, 3, 4, 8]
}
最佳答案
注意:这不是记录的行为,并且在其他 JVM 版本/更新或 JVM 实现中可能有所不同。话虽如此,它不太可能有所不同,因为可能有依赖此行为的程序,并且不太可能有充分的理由更改默认实现。
<小时/>在 Oracle/OpenJDK 中 HashMap 以自然顺序出现的原因是,对于较小的 hashCode()
值,键恰好不是在底层数组中随机排列的。对于小于容量且不会被简单的位重新排列函数“搅动”的非负值,hashCode 的值也是数组中的索引。
HashMap 的迭代器从数组的开头到结尾。
对于 Hashtable,布局是相同的,区别在于 values()
从数组末尾迭代到开头。
public boolean hasMoreElements() {
Entry<?,?> e = entry;
int i = index;
Entry<?,?>[] t = table;
/* Use locals for faster loop iteration */
while (e == null && i > 0) {
e = t[--i];
}
entry = e;
index = i;
return e != null;
}
我怀疑这是一种微优化,迭代器不需要与大小进行比较,而是与 0
简而言之,它不是线程安全的,允许 null
也不允许初始容量。 (容量仅与适用的值范围有关)
关于java - 从哈希表中读取值显示了自然顺序的倒数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49479576/
我有一套使用两种语言的文档:英语和德语。关于这些文档没有可用的元信息,程序只能查看其内容。基于此,程序必须决定用哪种语言编写文档。 是否有可以在几个小时内实现的针对该问题的“标准”算法?或者,一个免费
背景 我有一个日志系统,可以将记录输出到 std::ostream .每条记录都用一个计数器进行注释,该计数器随着每个输出而增加 1,如下所示: ===== Batch # 5 ===== T
用户可能希望根据需要分隔数字。 从字符串中提取所有(自然)数字的最有效(或简单的标准函数)是什么? 最佳答案 您可以使用正则表达式。我从 Sun's regex matcher tutorial 修改
我认为如果表有代理键而没有(自然)替代键是没有意义的(请记住,代理键的属性之一是它在数据库之外没有意义环境)。 例如假设我有下表: 假设 employee_id 是代理主键,表中没有(自然)备用键。
我想将屏幕方向锁定为其默认方向。我在实现这一点时遇到问题。最初我将屏幕锁定为 list 中的肖像。它适用于纵向默认设备。但是许多平板电脑默认为横向,因此在这些设备中锁定纵向是不合适的,我想检测此默认方
我已将笔记本电脑上的触摸板滚动设置为倒置(自然)。它适用于任何地方(pdf、浏览器等),但在 vscode 中,它坚持正常滚动。通过 vscode 的设置文件没有显示适当的条目。 系统:Ubuntu
在我发现的许多在上限集合上使用可尾游标的示例中,代码包括: hint( { $natural: 1 } ) (例如 here ),包括官方文档 ( here ),以“确保我们不使用任何索引”,并且结果
@override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: T
一些上下文:Node.js、Bot、natural module . 我想构建一个机器人,并且我正在使用自然模块来解析用户输入并对其进行总体分类。 var classifier = new natur
我是一名优秀的程序员,十分优秀!