我需要一个排序元素的Collection
,但不会删除重复项。我去过TreeSet
。允许重复项的TreeSet或TreeMap
由于
TreeSet
实际上增加值的支持TreeMap
:
public boolean add(E e) { return m.put(e, PRESENT)==null; }
而且树形图使用
Comparators
compare
逻辑
我写的删除重复项一个Comparator
在相同元素的情况下返回1而不是0。 因此,在相同元素的情况下,TreeSet
与此Comparator
不会覆盖重复项,只会对其进行排序。
我已经测试过简单的String
对象,但我需要一组自定义对象。
public static void main(String[] args)
{
List<String> strList = Arrays.asList(new String[]{"d","b","c","z","s","b","d","a"});
Set<String> strSet = new TreeSet<String>(new StringComparator());
strSet.addAll(strList);
System.out.println(strSet);
}
class StringComparator implements Comparator<String>
{
@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
}
}
我需要的所有fundCode
最高fundValue
会保持每个元素的出现次数的计数是配不上你? (换句话说,在你真实的代码中,重复是完全等价的,还是你需要保留一些差异?一个例子是一个不区分大小写但保持情况的集合或映射。) –
这不会是一个组。你需要一个排序列表或类似的东西。从javadoc:集合是一个集合,不能包含重复的元素.'''打破合同不是一个好主意。 – NeplatnyUdaj
http://stackoverflow.com/a/21974362/2736496 – aliteralmind