您这里有一个基本问题:您希望同时测试唯一性 并 订购条目。没有内置集合可以同时检查条目是否相等 以及 它们的比较是否为0。
例如,两个
Set实现是
HashSet和
TreeSet:
HashSet
使用Object
的.equals()
/.hashCode()
测试是否相等;TreeSet
使用Comparator
(或对象的Comparable
能力,如果实现的话)测试是否相等。
这不是完全一样的事情。实际上,对于一个特定的JDK类
BigDecimal,这可能会非常令人惊讶:
final BigDecimal one = new BigDecimal("1");final BigDecimal oneDotZero = new BigDecimal("1.0");final Set<BigDecimal> hashSet = new HashSet<>();// BigDecimal implements Comparable of itself, so we can use thatfinal Set<BigDecimal> treeSet = new TreeSet<>();hashSet.add(one);hashSet.add(oneDotZero);// hashSet's size is 2: one.equals(oneDotZero) == falsetreeSet.add(one);treeSet.add(oneDotZero);// treeSet's size is... 1! one.compareTo(oneDotZero) == 0
你们不能都吃蛋糕。在这里,您要根据名称测试唯一性,并根据年龄进行比较,必须使用
Map。
为了获得人员的排序列表,您将必须复制此地图
.values()作为列表并使用
Collections.sort()。如果您使用Guava,则后一部分将很简单
Ordering.natural().sortedCopy(theMap.values()),前提是您的值实现了
Comparable。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)