【发布时间】:2015-03-09 05:55:27
【问题描述】:
我有一个 listView,最初有一些内容。如果得到相同的内容,我通过linkedhashset 删除了重复项。现在,我想将linkedhashset 的内容(即没有重复内容)复制到新的ArrayList。
我尝试通过复制
p.addAll(0,lhm); // P is the instance of ArrayList and lhm is linkedHashset instance
但是,ArrayList 也包含重复内容。
例子:
ArrayList<Price> p = new ArrayList<Price>();
p.add(new Price("Banana", 60));
p.add(new Price("Apple", 80));
LinkedHashSet<Price> lhm = new LinkedHashSet<Price>(p);
lhm.add(new Price("Banana", 20));
lhm.add(new Price("Apple", 40));
lhm.add(new Price("Orange", 30));
for(Price pr:lhm)
{
System.out.println(pr);
}
Price duplicate = new Price("Banana", 20);
System.out.println("inserting duplicate object...");
lhm.add(duplicate);
lhm.add(new Price("Apple", 40));
p.addAll(0,lhm);
System.out.println("After insertion:");
for(Price pr:lhm)
{
System.out.println(pr);
}
for (int i = 0; i < p.size(); i++) {
System.out.println(p.get(i).getItem() +"-" +p.get(i).getPrice());
}
价格等级
class Price
{
private String item;
private int price;
public Price(String itm, int pr)
{
this.item = itm;
this.price = pr;
}
public int hashCode()
{
System.out.println("In hashcode");
int hashcode = 0;
hashcode = price;
//System.out.println(hashcode);
hashcode+= item.hashCode();
// System.out.println(hashcode);
return hashcode;
}
public boolean equals(Object obj)
{
System.out.println("In equals");
if (obj instanceof Price)
{
Price pp = (Price) obj;
return (pp.item.equals(this.item) && pp.price == this.price);
}
else
{
return false;
}
}
public String getItem()
{
return item;
}
public void setItem(String item)
{
this.item = item;
}
public int getPrice()
{
return price;
}
public void setPrice(int price)
{
this.price = price;
}
public String toString()
{
return "item: "+item+" price: "+price;
}
}
输出:
In hashcode
In hashcode
In hashcode
In hashcode
In hashcode
item: Banana price: 60
item: Apple price: 80
item: Banana price: 20
item: Apple price: 40
item: Orange price: 30
inserting duplicate object...
In hashcode
In equals
In hashcode
In equals
//iterating linkedhasset content
After insertion:
item: Banana price: 60
item: Apple price: 80
item: Banana price: 20
item: Apple price: 40
item: Orange price: 30
// iterating ArrayList p content
Banana-60
Apple-80
Banana-20
Apple-40
Orange-30
Banana-60
Apple-80 <-- duplicate
【问题讨论】:
-
如果您仔细考虑,这不是问题。您创建了一个数组列表并在其中添加了两个元素。并使用该数组列表创建了另一个集合,并在集合上进行了一些插入,然后添加到列表中。那么你期待什么。如果您在其中添加了一些元素,列表如何防止重复(使用您的逻辑)?
-
由于
LinkedHashset只有独特的项目,我想有没有办法将独特的内容复制到新的ArrayList。 -
@user3289108 AKS 的回答正是证明了这一点。您的问题是您添加了对原始列表的相同引用的副本。如果你先清除它,所有的新元素都将是唯一的。
标签: java android arraylist linkedhashset