Duplicate values in the Set collection?

The very definition of a Set disallows duplicates. I think perhaps you want to use another data structure, like a List, which will allow dups.

Is there any way to make the elements unique and have some copies of them?

If for some reason you really do need to store duplicates in a set, you'll either need to wrap them in some kind of holder object, or else override equals() and hashCode() of your model objects so that they do not evaluate as equivalent (and even that will fail if you are trying to store references to the same physical object multiple times).

I think you need to re-evaluate what you are trying to accomplish here, or at least explain it more clearly to us.


From the javadocs:

"sets contain no pair of elements e1 and e2 such that e1.equals(e2), and at most one null element"

So if your objects were to override .equals() so that it would return different values for whatever objects you intend on storing, then you could store them separately in a Set (you should also override hashcode() as well).

However, the very definition of a Set in Java is,

"A collection that contains no duplicate elements. "

So you're really better off using a List or something else here. Perhaps a Map, if you'd like to store duplicate values based on different keys.


Ever considered using a java.util.List instead?

Otherwise I would recommend a Multiset from Google Guava (the successor to Google Collections, which this answer originally recommended -ed.).