java - 存储和比较所有元素的有效方法

标签 java performance

我有一个List<Solution> data = new ArrayList<Solution>();其中保存用户信息。 Solution包含用户电子邮件、地址、订单 ID 和信用卡信息以及交易 ID,我想找出重复的数据(相同的交易 ID 和相同的电子邮件地址)。所以,我必须比较所有数据,我这样做了

int totalNumberOfData = data.size();
int counter;
for (counter = 0; counter < totalNumberOfData; counter++) {
    for (int j = 1; j < totalNumberOfData; j++) {
        boolean faurdFound;
        faurdFound = isFaurdDeal(counter, j);
        if (faurdFound == true) {
            break;
        }
    }
}

我想知道:

  1. 为了进行数据比较,这个解决方案是否有效或者有没有更好的方法来实现这个解决方案?
  2. 我正在使用List用于存储数据。如果我使用 HashMap而不是List 。会有效率吗? HashMap不遵守秩序。但是,我必须维持秩序。什么可以更好地解决这个问题?

最佳答案

您的解决方案具有二次计算复杂度。它基本上意味着它消耗的时间与列表大小的平方成正比。您可以阅读 Big-O 表示法以了解此特征的更形式化 View - http://en.wikipedia.org/wiki/Big_O_notation

使用LinkedHashMap并正确重写Solutionequals()hashCode()方法,您可以达到线性复杂性,因为检查存在性将在恒定时间内完成。

关于java - 存储和比较所有元素的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21707195/

相关文章:

java - hibernate criteria api连接表问题

Java动态矩阵

java - 在Web应用程序中使用Hibernate和Spring的问题

performance - Spree 3 网站速度很慢

mysql - group by 中使用的二元运算符会阻止使用索引进行优化吗?

java - "Beautify"Java控制台输出

java - 检查 playframework 模板中的集合是否为空

python - 为什么 `vectorize` 的性能优于 `frompyfunc` ?

.net - servicestack 自托管服务使用分块编码 - 是无缓冲的吗?

JavaFX:阶段和 Controller 生命周期...内存管理