user3289108 user3289108 - 3 months ago 27
Android Question

Copying LinkedHashset content to new ArrayList?

I've a listView that has some content initially. If the same content it gets, i removed the duplication through

linkedhashset
. Now, i want copy the
linkedhashset
contents i.e without duplication contents to new
ArrayList
.

I tried to copy through

p.addAll(0,lhm); // P is the instance of ArrayList and lhm is linkedHashset instance


But, the
ArrayList
includes the duplication content too.

Example :

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());
}


Price.class

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;
}
}


Output :

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

AKS AKS
Answer

The following line just inserts all the elements into the arraylist starting from the 0th index

p.addAll(0,lhm);

And, the elements which were added using these lines were still present in the arraylist:

p.add(new Price("Banana", 60));
p.add(new Price("Apple", 80));

So, you should clear the array list before adding the items from the linkedhashset, in case you don't want the duplicates. i.e.

p.clear();
p.addAll(lhm); // and, at this point you don't need the index.
Comments