我需要一個排序元素的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