我有以下这段代码:
for(ArticleBasketInBean basketBean : bean.getBasket()) {
for(ArticleDTO article : dto.getArticleList()) {
if(basketBean.getArticleReference().equals(article.getArticleReference())) {
article.setAddedToBasket(true);
}
}
}
显然,上述操作的时间复杂度为O(n ^ 2)。对于这种情况,articleReference
是唯一的。因此,bean.getBasket()
返回的列表没有重复articleReference
,对于dto.getArticleList()
返回的列表也是如此。
我想避免这种嵌套迭代,并希望编写更快的代码。我怎么能这样做?
答案 0 :(得分:4)
当然,使用java.util.HashSet
来缓存其中一组引用,假设这些集合不是太大。有了良好的哈希函数,这应该会让你回到O(n)。
答案 1 :(得分:1)
一个简单的break
会救你。
for(ArticleBasketInBean basketBean : bean.getBasket()) {
for(ArticleDTO article : dto.getArticleList()) {
if(basketBean.getArticleReference().
equals(article.getArticleReference())) {
article.setAddedToBasket(true);
break;
}
}
}
答案 2 :(得分:1)
如果你没有太多的文章/篮子,并且你说参考文献是独一无二的,你可以做这样的事情;我们打电话给R
参考类型,A
文章类型,B
购物篮的类型:
// since all references are unique we can use that, but see below
Map<R, A> mappedArticles = new IdentityHashMap<>();
// inject articles based on references in the map, then
A article;
for (B basket: bean.getBasket())
article = mappedArticles.get(basket.getArticleReferences());
if (article != null)
article.setAddedToBasket(true);
// Full list of articles is in the map's .values()
注意: