java - 优化嵌套 if 语句中的嵌套 for 循环

标签 java performance

我正在尝试优化这段代码。我能想到的唯一优化是在第二个 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/

相关文章:

c# - WPF 应用程序在第一次交互后停止/卡住,例如单击按钮

c++ - 将单词拆分为两个字节的最快方法

Java InputStream 读取区域设置相关吗?

java - Java中的继承简单说明

java - ConcurrentHashMap:将集合存储为值时需要同步

ios - 在 iOS 4+ 上优化调色板纹理到 RGB565 的转换(使用查找表)

performance - 是否可以加速此 MATLAB 脚本?

java - 截断双数

Java 集合 - 存储多种信息

c++ - 提升线程不会使程序更快