我是泛型新手,所以不确定我的问题的答案opinion based
是否是真的。在下面的代码中,对一个对象条目的键进行大小写需要什么?
Object k;
if (e.hash == hash && ((k = e.key) == key || (key != null && key.equals(k))))
它似乎很容易被替换
if (e.hash == hash && (e.key == key || (key != null && key.equals(e.key))))
更多参考:
final Entry<K,V> getEntry(Object key) {
int hash = (key == null) ? 0 : hash(key);
for (Entry<K,V> e = table[indexFor(hash, table.length)];
e != null;
e = e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key || (key != null && key.equals(k))))
return e;
}
return null;
}
这是一种极端的优化措施,对于通用编程实践来说可能不是必需的。这是一个可以回答您问题的讨论。下面的语句是从该帖子中复制的:
这是Doug
Lea流行的一种编码风格。这是一个极端的优化,可能没有必要。您可以期望JIT进行相同的优化。(您可以尝试自己检查机器代码!)不过,复制到本地代码会生成最小的字节码,对于低级代码,最好编写更接近机器的代码。
问题内容: 决定将这些方法包含在java.lang.Object中的背后原因是什么?平等和哈希对于许多类没有意义。 建立两个接口将更加合乎逻辑: 例如,HashSet定义可能看起来像 这将防止出现一个常见的初学者错误-使用项目集而不实现equals / hashCode。 问题答案: 当我们实现一个接口时,我们注入(或接受)该接口定义的合同。 &是两个不同的合同。但是,如果我们仔细观察,就会发现它
问题内容: 我试图将50,000个对象(因此50,000个键)插入。但是,我不断收到OutOfMemory异常。(这是我自己的课程-重量很轻- 一个字段和三个字段)。 这似乎很荒谬,因为我看到计算机上有足够的可用内存–可用RAM和虚拟内存的HD空间。 Java是否可能在某些严格的内存需求下运行?我可以增加这些吗? 有一些奇怪的限制吗?我需要自己实施吗?还有其他值得一看的课程吗? (我正在具有2GB
嗨,我正在尝试学习hashcode()和equals()方法的目的。我尝试了以下程序。 输出: 我有两个疑问: 1) 我认为HashMap将包含一个条目,因为两个对象(ob1和ob2)的hascode是相同的。有人能解释为什么HashMap中有两个条目吗? 2)为什么返回false?
问题内容: 我正在将值放入形式的哈希图中, 我想使用map方法创建一个列表。 要么 但是,它将引发异常: 线程“主”中的异常java.lang.ClassCastException: java.util.HashMap $ Values无法转换为java.util.List 但是它允许我将其传递给列表的创建: 问题答案: 说明 因为返回a ,而不能将a 转换为an ,所以得到。 我建议使用构造函数
问题内容: 我正在使用Vue.js创建一个组件。 当我引用中的任何所述的生命周期钩(,,等等)它的计算结果为: 我的计算属性内部也发生了同样的事情: 我收到以下错误: 未捕获的TypeError:无法读取未定义的属性“ bar” 为什么要在这些情况下进行评估? 问题答案: 这两个示例都使用arrow函数,该函数绑定到与Vue实例不同的上下文。 根据文档: 不要在实例属性或回调(例如)上使用箭头功能
问题内容: var x int done := false go func() { x = f(…); done = true } while done == false { } 这是Go代码。我的恶魔告诉我,这是UB代码。为什么? 问题答案: Go Memory Model不保证该程序将始终遵守在goroutine中写入x的值。go常规销毁 部分中提供了一个类似的错误程序作为示例。 在本节中,G