【发布时间】:2013-05-17 11:07:30
【问题描述】:
我有一个带有自定义对象的 ArrayList。我想要的是根据自定义对象的名称属性从数组中删除重复项。我试图用 Set person = new TreeSet();但它不起作用。我猜是因为该集合正在比较地址或名称属性以外的其他内容。所以我现在正在尝试使用一个也不删除重复项的迭代器。这就是我得到的;
ArrayList<Person> people = new ArrayList<Person>();
Iterator<Person> iterator = people.iterator();
while (iterator.hasNext()) {
Person person = iterator.next();
if (person.getName().equals(iterator.next().getName())) {
iterator.remove();
}
}
for (Person person : people) {
System.out.println(person.getName());
}
虽然我在其中看到重复项,但 ArrayList 并未被修改。我需要帮助。谢谢!
【问题讨论】:
-
人是否实现了equals和hashcode?如果你实现 equals 和 hashcode,Set 应该可以工作
-
在迭代时删除通常是个坏主意......也许最好创建一个单独的列表并将预期结果过滤(添加)到新列表中。
-
为什么在迭代时删除是个坏主意?如果仅从一个线程访问它,这是一个好主意。如果不是,您还有其他问题