双嵌套for循环迭代(ArrayList)

时间:2013-10-12 21:30:13

标签: java arraylist iteration

我有一个涉及加载'PlayerValue'对象的系统。对象的格式如下:[Header]值。我将这些保存在文本文件中,每当我保存或从文件中读取时,我想删除重复的标题。所以我这样做了:

首先,我将文件中的所有PlayerValues加载到名为'array'的ArrayList中,然后:

for (PlayerValue v : array) {
            for (PlayerValue v1 : array) {
                if (v1.header.equals(v.header)) {
                    array.remove(v1);
                }
            }
        }

在这里你可以看到,它遍历数组的每个项目,然后对于每个项目,它再次搜索数组中的相同标题。

这会有效地删除重复的标头,除了它抛出ConcurrentModificationException之外。

任何解决方案的帮助?

1 个答案:

答案 0 :(得分:2)

即使这样有效,删除重复项也是一种不好的方法。更好的选择是拥有Map<Header, PlayerValue>

Map<String, PlayerValue> map = new HashMap<>();

for (PlayerValue v : array)
    map.put(v.header, v);

现在您可以遍历此地图的条目,这些条目不包含重复的键(标题):

array.clear();

for (Entry<?, PlayerValue> e : map.entrySet())
    array.add(e.getValue());