【发布时间】:2016-06-23 03:17:49
【问题描述】:
我有一个列表和一个集合:
List<Filter> filters
和
Collection<Vehicle> vehicles
我想根据某些条件从第一个列表中删除一些元素。但我的解决方案很慢。 你能推荐一个更快的方法吗? 这是我的解决方案:
final Iterator<Filter> iterator = filters.iterator();
while (iterator.hasNext()) {
final Filter filter = iterator.next();
for (final Vehicle vehicle : vehicles) {
if (filter.getX().equalsIgnoreCase(vehicle.getX())
&& filter.getY().equalsIgnoreCase(vehicle.getY())
&& filter.getZ().equalsIgnoreCase(vehicle.getZ())) {
iterator.remove();
}
}
}
【问题讨论】:
-
也许..添加一个具有 xyz 复合值的 id 字段并比较它而不是 xyz 单独?或者使用地图来标识要单独移除的元素
-
Java 8 流的 API 可能更高效
-
您的方法的时间复杂度为 O(MN),太糟糕了。 1.尝试使用HashMap。你需要额外的空间,但你可以在 O(N+M) 中完成你的工作。如果您限制额外的空间使用。只需对两个集合进行排序,然后使用 2 个指针,如果您的车辆是linkedList(不是arrayList),您可能具有(MlogM)时间复杂度。
-
车辆的 x、y 和 z 有哪些类型?每个值可以有什么范围?
-
@Bohemian:x、y 和 z 是字符串。
标签: java