我正在尝试优化这段代码。我能想到的唯一优化是在第二个 if 条件内的 applyOfferChanges(...) 之后返回或break语句。 有什么想法吗?
void applyFavoriteChangesToMerchantStore(){
List<Merchant> favoriteMerchantsList = FavoriteMerchantStore.getInstance().getFavoriteMerchantsList();
if(favoriteMerchantsList != null && !favoriteMerchantsList.isEmpty()) {
List<Merchant> storeMerchantList = MerchantStore.getInstance().getMerchantList();
for (Merchant storeMerchant : storeMerchantList) {
for (Merchant favoriteMerchant: favoriteMerchantsList){
if(TextUtils.equals(storeMerchant.getId(), favoriteMerchant.getId())){
//merchant match found
//set merchant favorite status
storeMerchant.setFavoriteMerchant(favoriteMerchant.getFavoriteMerchant());
//set offer favorite status
applyOfferChanges(favoriteMerchant.getOffferList(),
storeMerchant.getOffferList());
}
}
}
}
}
最佳答案
这完全取决于您尚未向我们展示的内容。列表有多大,TextUtils.equals
到底有什么作用?假设它是 android.text.TextUtils
,答案很明确:不要使用两个嵌套循环(复杂度 O(m*n)
),而是使用 HashMap
(复杂度 O(m+n)
)。
而不是
for (Merchant storeMerchant : storeMerchantList) {
for (Merchant favoriteMerchant: favoriteMerchantsList) {
if(TextUtils.equals(storeMerchant.getId(), favoriteMerchant.getId())) {
....
}
做
Map<String, Merchant> favoriteMerchantMap = new HashMap<>();
for (Merchant favoriteMerchant : favoriteMerchantsList) {
favoriteMerchantMap.put(favoriteMerchant.getId(), favoriteMerchant));
}
for (Merchant storeMerchant : storeMerchantList) {
Merchant favoriteMerchant = favoriteMerchantMap.get(storeMerchant.getId());
if (favoriteMerchant != null) {
....
}
关于java - 优化嵌套 if 语句中的嵌套 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59654129/