【发布时间】:2015-01-28 15:41:25
【问题描述】:
我有两个 Arraylist,A 和 B。
ArrayList A 由包含一组数据的类组成,其中包括一个名为categoryID 的标识符。 A 中的多个项目可以具有相同的categoryID。对于 A 中的每个项目,CategoryID 可以如下所示:[1, 1, 2, 2, 3, 4, 7]。
ArrayList B 由包含不同数据集的不同类组成,包括categoryID。 categoryID 对于此列表中的每个项目都是唯一的。示例:[1, 2, 3, 4, 5, 6, 7]。
两个列表都按categoryID 排序,希望这会更容易。
我要做的是提出一个新列表 C,它由 listB 中的项目组成,这些项目至少与 listA 有一个交集。所以列表 C 应该包含来自上面给定输入的项目[1, 2, 3, 4, 7]。
到目前为止,我的策略是遍历这两个列表。我不认为这是最有效的方法,所以我想问一下我可以考虑的其他替代方案是什么。
我的方法:
ArrayList<classB> results = new ArrayList<classB>();
for (classA itemA : listA){
int categoryID = item.categoryID;
for (classB itemB : listB){
if (itemB.categoryID == categoryID){
if (!results.contains(itemB)){
results.add(itemB);
}
break;
}
}
}
我先遍历列表A,获取categoryID,然后遍历listB,找到匹配的categoryID。当我找到它时,我检查结果列表是否包含来自 listB 的项目。如果没有,那么我将其添加到结果中并跳出内部 for 循环并继续遍历 listA。如果结果列表已经包含 itemB,那么我将简单地跳出内部 for 循环并继续遍历 listA。这种方法是 O(n^2),对于大数据集不是很好。有什么改进的想法吗?
【问题讨论】:
标签: java performance optimization arraylist