- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有以下来自 Joshua Bloch 的 effective java 的代码(第 9 项,第 3 章,第 49 页)
If a class is immutable and the cost of computing the hash code is significant, you might consider caching the hash code in the object rather than recalculating it each time it is requested. If you believe that most objects of this type will be used as hash keys, then you should calculate the hash code when the instance is created. Otherwise, you might choose to lazily initialize it the first time hashCode is invoked (Item 71). It is not clear that our PhoneNumber class merits this treatment, but just to show you how it’s done:
// Lazily initialized, cached hashCode
private volatile int hashCode; // (See Item 71)
@Override public int hashCode() {
int result = hashCode;
if (result == 0) {
result = 17;
result = 31 * result + areaCode;
result = 31 * result + prefix;
result = 31 * result + lineNumber;
hashCode = result;
}
return result;
}
我的问题是这里的缓存(记住 hashCode)是如何工作的。第一次调用hashCode()
方法,没有hashCode
赋值给result。简要说明此缓存的工作原理会很棒。谢谢
最佳答案
简单。阅读下面我嵌入的评论...
private volatile int hashCode;
//You keep a member field on the class, which represents the cached hashCode value
@Override public int hashCode() {
int result = hashCode;
//if result == 0, the hashCode has not been computed yet, so compute it
if (result == 0) {
result = 17;
result = 31 * result + areaCode;
result = 31 * result + prefix;
result = 31 * result + lineNumber;
//remember the value you computed in the hashCode member field
hashCode = result;
}
// when you return result, you've either just come from the body of the above
// if statement, in which case you JUST calculated the value -- or -- you've
// skipped the if statement in which case you've calculated it in a prior
// invocation of hashCode, and you're returning the cached value.
return result;
}
关于java - 正如 Joshua Bloch 在有效 Java 中所建议的那样,缓存哈希码如何在 Java 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18473071/
在“Effective Java”一书中,Joshua Bloch 说:“不可能在 Collection Framework 中子类化任何方便的实现类”。 如果 ArrayList、LinkedLis
从这里Artima article on clone vs copy constructor : Object's clone method is very tricky. It's based on
我的一个类中有许多构造函数,因此我认为为其中一个类(Spring 项目)实现 Bloch 的“构建器模式”(参见 http://www.informit.com/articles/article.as
假设我有一个抽象类 (BaseThing)。它有一个必需参数(“base required”)和一个可选参数(“base optional”)。我有一个扩展它的具体类(Thing)。它还具有一个必需参
我正在考虑使用 Joshua Bloch 所描述的构建器模式 here .我有一个显示警报消息的类,将被许多应用程序使用。它可以有大量不同的选项,如 line1、btn txt、title、line2
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 8 年前。 Improve th
读了两遍这本书的这一部分后,我仍然不明白为什么如此广泛地阐述这一点。非静态成员类是语言的一部分。同意并非任何编程语言的所有部分都是完美的。发挥非静态成员类的优点,即可以访问封闭实例的方法,因此很少会超
我正在阅读 Joshua Bloch 的书 effective java。在“favor composition over inheritance”的第 16 条中,他给出了一个使用 HashSet
我正在使用 QuTiP 绘制 Bloch 球体图。我想给它一个标题。我怎样才能做到这一点?我在 Google 上搜索但找不到答案。 最佳答案 您需要将 Bloch 球体渲染到 matploltib 中
我想知道封闭类可以创建多少个静态成员类实例。我假设只有一个,但 Bloch 的以下摘录对我来说没有意义。 引用 Joshua Bloch 的 Effective Java - Item 22*:优先使
我使用 Joshua Bloch 介绍的 Java 构建器模式。有时,我发现与原始类型相比,使用默认值初始化某些字段的开销更高。 因此,我的策略是什么。 我延迟了这些字段的默认值初始化操作。 在构建过
考虑 Bloch 的 Builder 模式的逐字副本(对 C# 的语法进行了更改): public class NutritionFacts { public int ServingSize {
与仅使用构造函数创建对象相比,内存和性能使用情况如何? 这里的用法是创建一个 Set或 List可能包含数以百万计的条目,我担心使用 Bloch 的 Builder 模式的开销。我过去使用过它,但从未
我最近开始使用 QuTip for Python。我想使用 qutip.Bloch() 绘制 Bloch 球体中两级系统的演化,但我不知道如何将这样的图绘制为连续线。 这是我目前使用的代码: bola
这个问题已经有答案了: Properly removing an Integer from a List (8 个回答) 已关闭 9 年前。 我现在正在阅读 Joshua Bloch 的《Effect
Joshua Bloch 建议将构建器模式作为具有太多构造选项或太多构造函数参数的类的解决方案。 GOF builder 的基本意图是“将对象的构造与其表示分离”,或者基本上是为具有相同基类的不同最终
我正在尝试为下面的类使用 Builder 模式。最初我使用类的构造函数来设置所有参数,但不小心遇到了 Builder 模式,它看起来很适合我的用例。 下面是我的类(class),其中人们通常总是传递
回到 2007 年,我读了一篇关于 Joshua Blochs 的文章,介绍了“构建器模式”以及如何修改它以改善构造函数和 setter 的过度使用,尤其是当一个对象具有大量属性时,其中大部分是可选的
请看这个link .关于枚举,Bloch 先生说 Java’s enum types are classes that export one instance for each enumeration
我加入了 C# 潮流,想知道是否有 Joshua Bloch 的 Effective Java 的等价物对于 C# 世界。 鉴于它们的相似性,我已经能够将一些 Java 知识应用到 C# 中,但我对最
我是一名优秀的程序员,十分优秀!