我有一个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;
}
}
}
我想知道:
List
商店数据。如果我使用HashMap
而不是List
。会有效吗? HashMap
不遵循排序。但是,我必须维持秩序。对于这个问题,什么可以是更好的解决方案?答案 0 :(得分:2)
您的解决方案具有二次计算复杂性。它基本上意味着它消耗的时间与列表大小的平方成正比。您可以阅读有关Big-O表示法的内容,以了解有关此特征的更正式化视图 - http://en.wikipedia.org/wiki/Big_O_notation
使用LinkedHashMap
正确覆盖equals()
和hashCode()
Solution
方法,您可以达到线性复杂性,因为检查是否存在将在固定时间内完成。
答案 1 :(得分:1)
HashMap
或HashSet
可以更快地检查它们是否包含对象,因为它不需要扫描列表中的每个对象。问题是您需要提前识别正确的密钥,但只要您能做到这一点,它们就能很好地工作。
如果您需要订购,可以使用TreeMap
(将保持元素排序)或LinkedHashMap
(这将按照添加顺序保留元素)。