[英]efficient way to store and compare all elemets
我有一个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;
}
}
}
我想知道:
List
来存储数据。如果我使用HashMap
而不是List
。 会有效吗? HashMap
不遵循顺序。但是,我必须保持顺序。 有什么更好的解决方案? 您的解决方案具有二次计算复杂性。 这基本上意味着它消耗的时间与列表大小的平方成正比。 您可以阅读有关Big-O表示法的信息,以了解有关此特征的更正式视图-http://en.wikipedia.org/wiki/Big_O_notation
将LinkedHashMap
与Solution
适当重写equals()
和hashCode()
方法一起使用,可以达到线性复杂度,因为检查存在性的时间是固定的。
HashMap
或HashSet
将允许更快地检查它们是否包含对象,因为它不需要扫描列表中的每个对象。 要注意的是,您需要提前确定正确的密钥,但是只要您能够做到,它们就可以很好地工作。
如果需要排序,则可以使用TreeMap
(将元素排序)或LinkedHashMap
(将元素按添加顺序排序)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.