[英]Optimized way to check for equality between value of Objects inside a List
我有两个清单:
答:列出<MyCustomObject>
B.列出<MyCustomObject>
MyCustomObject有各种字段。 例如,字段ID
在我的程序中,我需要检查两个列表中是否存在相同的id 。 所以目前我正在进行嵌套迭代:
for(int i=0;i<a.size();i++) {
MyCustomObject obj = a.get(i);
for(int j=0;j<b.size();j++) {
if( obj.getId().equals(b.get(j).getId()) {
//do something
break;
}
}
}
由于我经常需要执行此操作,因此我看起来没有优化,因为我经常迭代长列表。
我该如何优化此操作?
您可以使用Map (例如HashMap)而不是使用列表 - 假设您的id是int,它可能看起来像:
Map<Integer, MyCustomObject> objects = new HashMap<>();
//populate
objects.put(someCustomObject.getId(), someCustomObject);
//find an id:
CustomObject obj = objects.get(someId);
注意:假设id是唯一的。
线性时间算法是将第一个列表中的ID值与布尔值进行散列。 然后,您在第二个列表上行进以查找ID值,如果散列已包含该ID的密钥,则在两个列表之间共享该ID。
您还可以通过按ID排序列表来改进O(n ^ 2)的运行时间,这是一个O(n log n)操作,并且线性地遍历列表以查看是否共享任何值。 如果要保持列表的顺序,可以创建列表的另一个排序副本,但这会增加内存空间。
我相信,在不改变列表元素的顺序或创建新的数据结构的情况下,您所拥有的就是您所能做的。 但是,我不知道你的要求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.