Java:记住处理哪些对象的有效方法

标签 java performance optimization hash hashset

记住处理哪些对象的最有效方法是什么?

显然可以使用哈希集:

Set<Foo> alreadyProcessed = new HashSet<>();

void process(Foo foo) {
    if (!alreadyProcessed.contains(foo)) {
        // Do something
        alreadyProcessed.add(foo);
    }
}

这让我想知道为什么我要存储该对象,而我只想检查该哈希值是否存在于该集合中。假设 foo 的任何哈希都是唯一的。

有没有更高效的方法来做到这一点?

请记住,将处理大量对象,并且实际的处理代码并不总是非常繁重。另外,我也不可能有一个预编译的对象工作列表,它将在处理过程中动态构建。

最佳答案

  1. Set#contains 可以非常快。这取决于您的 hashcode()equals() 方法是如何实现的。尝试缓存哈希码值以使其更快。 (如 String.java)

  2. 另一个简单快捷的选项是向 Foo 类添加一个 boolean 成员:foo.done = true;

关于Java:记住处理哪些对象的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32487361/

相关文章:

java.lang.IllegalStateException : Trying to requery an already closed cursor error 错误

java - Java中同步部分的性能

mysql - 连接表性能的 ORDER BY 列

java - 为什么这会将类型解析为接口(interface)?

java - 控制射速 (Java GameDev)

java - 如何在 Kotlin 上绕过 NetworkOnMainThreadException

c# - DataGridView 性能与 BindingList 数据源相结合

c - 为什么 GCC 不优化结构?

java - 著名压缩算法(LZ78)执行缓慢

c - 整数立方根