java - Hashset 和 Arraylist 性能

标签 java performance algorithm arraylist hashset

我已经实现了一种方法,它简单地循环一组 CSV 文件,其中包含许多不同模块上的数据。然后将“moduleName”添加到 hashSet 中。 (代码如下)

我使用了 hashSet,因为它保证不会插入重复项,而不是 ArrayList,后者必须使用 contains() 方法并遍历列表以检查它是否已经存在。

我相信使用散列集比数组列表有更好的性能。 我这样说对吗?

还有,谁能给我解释一下:

  1. 如果使用每个数据结构,如何发挥性能?
  2. 使用大 O 表示法的复杂度是多少?

    HashSet<String> modulesUploaded = new HashSet<String>();
    
    for (File f: marksheetFiles){
        try {
            csvFileReader = new CSVFileReader(f);
            csvReader = csvFileReader.readFile();
            csvReader.readHeaders();
    
            while(csvReader.readRecord()){
                String moduleName = csvReader.get("Module");
    
                if (!moduleName.isEmpty()){
                    modulesUploaded.add(moduleName);
                }
            }
    
        } catch (IOException e) {
            e.printStackTrace();
        }
    
        csvReader.close();
    }
    return modulesUploaded; 
    

    }

最佳答案

My experiment表明 HashSet 比从包含 3 个元素的集合开始的 ArrayList 更快。​​

完整的结果表

| Boost  |  Collection Size  |
|  2x    |       3 elements  |
|  3x    |      10 elements  |
|  6x    |      50 elements  |
|  12x   |     200 elements  |  <= proportion 532-12 vs 10.000-200 elements
|  532x  |  10.000 elements  |  <= shows linear lookup growth for the ArrayList

关于java - Hashset 和 Arraylist 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10196343/

相关文章:

algorithm - 考虑 QWERTY 键盘布局检测随机键盘点击

java - 使用 firebase java.lang.NoClassDefFoundError : Failed resolution of: Lcom/google/android/gms/common/internal/zzbq react native

performance - 三角函数的效率/速度

android - systrace:HTML 输出的跟踪结果格式无效

mysql - MySql 嵌套 SP 会成为瓶颈吗?

c++ - uint32_t 值对的交换哈希函数

java - 如何在 Java 应用程序中导入重复的包结构和类

java - Java中执行/usr/bin/env bash -c "command"

java - 条件检查并返回不带变量,调用方法两次: Possible?

algorithm - 改进这个压缩算法?