2

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

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

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

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

这将有效地删除重复的标头,除了它引发 ConcurrentModificationException 的事实。

任何解决方法的帮助?

4

1 回答 1

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());
于 2013-10-12T21:33:41.410 回答