【发布时间】:2015-12-24 16:25:40
【问题描述】:
我的项目中有一个ArrayList<CustomObject> 作为ArrayList<Names>。 Names pojo 包含 name 和 image 字段如下:
Names.java
public class Names {
private String name;
private String image;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public Names(String name, String image) {
this.name = name;
this.image = image;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return name;
}
}
我正在为字段添加值,如下所示:
ArrayList<Names> menu = new ArrayList<Names>();
menu.add(new Names("chandru","image1"));
menu.add(new Names("vikki","image2"));
menu.add(new Names("karthick","image3"));
menu.add(new Names("chandru","image4"));
menu.add(new Names("karthick","image5"));
menu.add(new Names("chandru","image6"));
menu.add(new Names("karthick","image7"));
menu.add(new Names("vikki","image8"));
menu.add(new Names("karthick","image9"));
menu.add(new Names("harish","image10"));
menu.add(new Names("vivek","image11"));
menu.add(new Names("harish","image12"));
我的要求:
现在我的所有要求是删除 ArrayList 中包含的重复名称。我尝试了几种删除重复项的方法,如下所示:
方法一:使用HashSet
将值添加到 HashSet 并将这些值分配回名为 al 的 new ArrayList<Names>。
ArrayList<Names> al = new ArrayList<Names>();
Set<Names> hs = new HashSet<Names>();
hs.addAll(menu);
al.clear();
al.addAll(hs);
System.out.println(al);
方法一的输出:
[karthick, vikki, karthick, karthick, chandru, vivek, vikki, chandru, harish, harish, karthick, chandru]
预期输出为:
删除重复项后的值:
[karthick, vikki,chandru, vivek, harish]
我也发布了我的整个课程供你参考
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
public class Sample {
public static void main(String[] args) {
ArrayList<Names> menu = new ArrayList<Names>();
menu.add(new Names("chandru","image"));
menu.add(new Names("vikki","image"));
menu.add(new Names("karthick","image"));
menu.add(new Names("chandru","image"));
menu.add(new Names("karthick","image"));
menu.add(new Names("chandru","image"));
menu.add(new Names("karthick","image"));
menu.add(new Names("vikki","image"));
menu.add(new Names("karthick","image"));
menu.add(new Names("harish","image"));
menu.add(new Names("vivek","image"));
menu.add(new Names("harish","image"));
ArrayList<Names> al = new ArrayList<Names>();
Set<Names> hs = new HashSet<Names>();
hs.addAll(menu);
al.clear();
al.addAll(hs);
System.out.println(al);
}
}
请帮助我解决我面临的从列表中删除重复项的问题。任何类型的建议和解决方案都会对我有很大帮助。提前致谢。
【问题讨论】:
-
您没有在
Names类中覆盖hashCode()和equals()。 -
如果你想让HashSet根据
Names的name消除重复,那么两个Names实例具有相同的name应该是相等的。但它们不是,因为您还没有覆盖equals()和hashCode()来实现这一点。 -
@JBNizet 我真的不知道该怎么做。可以发一段代码吗??
-
@Chandru 阅读了方法的 javadoc 以了解他们的合同。使用谷歌。做一些研究。这是重要的东西。你不应该只拿我的代码然后复制粘贴。您需要了解它是如何工作的。
标签: java android arraylist hashset duplicate-removal