我是Java的新手,经常发现我需要对Map<Key, Value>
值进行排序.
由于值不是唯一的,我发现自己将其转换keySet
为a array
,并通过数组排序对该数组进行排序,并使用自定义比较器对与键关联的值进行排序.
有没有更简单的方法?
我需要一个Collection
对元素进行排序,但不会删除重复项.
我已经去了TreeSet
,因为TreeSet
实际上将值添加到支持TreeMap
:
public boolean add(E e) {
return m.put(e, PRESENT)==null;
}
Run Code Online (Sandbox Code Playgroud)
TreeMap使用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);
}
}
} …
Run Code Online (Sandbox Code Playgroud)