这两个ArrayList方法有什么区别?

问题描述 投票:0回答:1

这些本质上不应该是一样的吗?但只有当我使用大小变量并显式更改大小时,代码才会按预期运行。

以下内容未按预期运行:

public static ArrayList<String> removeDuplicates(ArrayList<String> miembres)
    {
        for(int i = 0; i < miembres.size() - 1; i++)
        for(int j = i + 1; j < miembres.size(); j++)
        if(miembres.get(i).equals(miembres.get(j)))
        {
         miembres.remove(j);
         j--;
        }
        return miembres;
    }

以下内容确实按预期运行:

public static ArrayList<String> removeDuplicates(ArrayList<String> miembres)
    {
        int size = miembres.size();
        for(int i = 0; i < size - 1; i++)
        for(int j = i + 1; j < size; j++)
        if(miembres.get(i).equals(miembres.get(j)))
        {
         miembres.remove(j);
         size--;
         j--;
        }
        return miembres;
    }

for 循环不应该自动考虑大小的变化吗?

java arraylist methods comparison
1个回答
0
投票

在第一个片段中,您将

i
j
miembres.size()
进行比较,因此即使列表的大小减小,也不需要特殊处理 - 它将反映在对
size()
的调用中。

在第二个片段中,

size()
被调用一次并保存在一个局部变量中,该变量将不再受列表中更改的影响,因此当您从中删除一个项目时,您需要手动递减该变量(在此处完成)致电
size--
)。

© www.soinside.com 2019 - 2024. All rights reserved.