Я выбрал TreeSet, поскольку TreeSet фактически добавляет значения в поддерживаемую TreeMap:
Код: Выделить всё
public boolean add(E e) {
return m.put(e, PRESENT)==null;
}
Я написал компаратор, который возвращает 1 вместо 0 в случае равных элементов. Следовательно, в случае равных элементов TreeSet с этим компаратором не будет перезаписывать дубликат, а просто отсортирует его.
Я тестировал его для простых объектов String, но мне нужен набор пользовательских объектов.
Код: Выделить всё
public static void main(String[] args)
{
List strList = Arrays.asList( new String[]{"d","b","c","z","s","b","d","a"} );
Set strSet = new TreeSet(new StringComparator());
strSet.addAll(strList);
System.out.println(strSet);
}
class StringComparator implements Comparator
{
@Override
public int compare(String s1, String s2)
{
if(s1.compareTo(s2) == 0){
return 1;
}
else{
return s1.compareTo(s2);
}
}
}
РЕДАКТИРОВАТЬ
На самом деле у меня есть ArrayList следующего класса:
Код: Выделить всё
class Fund
{
String fundCode;
BigDecimal fundValue;
.....
public boolean equals(Object obj) {
// uses fundCode for equality
}
}
Подробнее здесь: https://stackoverflow.com/questions/222 ... duplicates
Мобильная версия