【发布时间】:2013-10-20 18:54:47
【问题描述】:
我有一个涉及加载“PlayerValue”对象的系统。对象的格式如下:[Header] 值。我将这些保存在文本文件中,每当我保存或读取文件时,我都想删除重复的标题。所以我这样做了:
首先,我将文件中的所有 PlayerValues 加载到一个名为“array”的 ArrayList 中,然后:
for (PlayerValue v : array) {
for (PlayerValue v1 : array) {
if (v1.header.equals(v.header)) {
array.remove(v1);
}
}
}
在这里你可以看到,它遍历数组的每一项,然后对于每一项,它再次在数组中搜索相同的标题。
这将有效地删除重复的标头,除了它会引发 ConcurrentModificationException。
对变通有什么帮助吗?
【问题讨论】:
-
使用 HashSet 等 Set 而不是 ArrayList。集合不允许重复。否则要在迭代时从集合中删除,请使用迭代器。
-
我可以处理重复的条目,但是两个 PlayerValues 可能具有相同的标头但值不同(从而使它们不相等)并且 ArrayList.contains 方法会忽略它。
-
@HovercraftFullOfEels 唯一的问题是他想根据某些属性删除重复项,而不仅仅是基于对象是否相等。