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

时间:2014-02-11 16:17:14

标签: java performance

我有一个List<Solution> data = new ArrayList<Solution>();,其中包含用户信息。Solution包含用户电子邮件,地址,订单和信用卡信息以及交易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不遵循排序。但是,我必须维持秩序。对于这个问题,什么可以是更好的解决方案?

2 个答案:

答案 0 :(得分:2)

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

使用LinkedHashMap正确覆盖equals()hashCode() Solution方法,您可以达到线性复杂性,因为检查是否存在将在固定时间内完成。

答案 1 :(得分:1)

HashMapHashSet可以更快地检查它们是否包含对象,因为它不需要扫描列表中的每个对象。问题是您需要提前识别正确的密钥,但只要您能做到这一点,它们就能很好地工作。

如果您需要订购,可以使用TreeMap(将保持元素排序)或LinkedHashMap(这将按照添加顺序保留元素)。