java - ArrayList 和 HashSet 插入性能测试结果让我很困惑

标签 java performance collections

我写了一个类来测试arraylist和hashset之间的插入性能,正如我所料,hashset插入性能会比arraylist好得多(可能是书骗了我),但是测试结果让我很困惑

    HashSet<String> hashSet = new HashSet<String>();

    long start = System.currentTimeMillis();
    for (int i = 0; i < 900000; i++) {
        hashSet.add(String.valueOf(i));
    }

    System.out.println("Insert HashSet Time: " + (System.currentTimeMillis() - start));


    ArrayList<String> arrayList = new ArrayList<String>();

    start = System.currentTimeMillis();

    for (int i = 0; i < 900000; i++) {
        arrayList.add(String.valueOf(i));
    }
    System.out.println("Insert ArrayList Time: " + (System.currentTimeMillis() - start));

result:
Insert HashSet Time: 978
Insert ArrayList Time: 287

我多次运行这个主要方法并且结果之间没有更多不同,插入arraylist时间比插入hashset时间短得多 谁能解释这个奇怪的结果。

最佳答案

哈希集和列表是不同类型的数据结构。因此,在选择之前,您应该考虑一下自己想用它们做什么。

HashSet

Longer insert time

Fast access time on elements

List

Fast append time

Long access time on elements

列表更快,因为它可以只在列表的末尾添加元素,hashset 必须找到插入的位置,然后使元素可访问,这比将它添加到一个列表。

关于java - ArrayList 和 HashSet 插入性能测试结果让我很困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15070104/

相关文章:

java - 为什么 Weka GUI 输出与 Java 代码不同?

java - 我试图在单击按钮时选择 PDF 文件,但出现错误

MySQL 优化子查询

android - 改进 Windows 7 x64 上的 Android 模拟器性能

collections - 计算 Landsat 集合的 NDVI

java - DynamoDbMapper ScanExpression 无法映射到 Java 对象

java - equals 中的 or 子句、哈希码

java - Hibernate HQL 与 IS NULL 的奇怪行为

.net - IronPython 性能

Java.util.Collection 重写 spliterator()