记住处理哪些对象的最有效方法是什么?
显然可以使用哈希集:
Set<Foo> alreadyProcessed = new HashSet<>();
void process(Foo foo) {
if (!alreadyProcessed.contains(foo)) {
// Do something
alreadyProcessed.add(foo);
}
}
这让我想知道为什么我要存储该对象,而我只想检查该哈希值是否存在于该集合中。假设 foo 的任何哈希都是唯一的。
有没有更高效的方法来做到这一点?
请记住,将处理大量对象,并且实际的处理代码并不总是非常繁重。另外,我也不可能有一个预编译的对象工作列表,它将在处理过程中动态构建。
最佳答案
Set#contains
可以非常快。这取决于您的hashcode()
和equals()
方法是如何实现的。尝试缓存哈希码值以使其更快。 (如 String.java)另一个简单快捷的选项是向 Foo 类添加一个 boolean 成员:
foo.done = true;
关于Java:记住处理哪些对象的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32487361/