Java 具有重复值(键、值)的有序集合
我想知道是否有具有以下属性的集合:Java 具有重复值(键、值)的有序集合,java,collections,Java,Collections,我想知道是否有具有以下属性的集合: 键、值 允许重复值 能够按值排序,同时保留重复值 例如: 没有命令 (1,2) (2,1) (3,1) (4,2) 有序的 (2,1) (3,1) (1,2) (4,2) 我尝试使用比较器treeMap,但它无法删除重复的值 @Override public int compare(Object o1, Object o2) { Comparable valueA = (Comparable) map.get(o1);
(1,2)
(2,1)
(3,1)
(4,2)
有序的
(2,1)
(3,1)
(1,2)
(4,2)
我尝试使用比较器treeMap
,但它无法删除重复的值
@Override
public int compare(Object o1, Object o2) {
Comparable valueA = (Comparable) map.get(o1);
Comparable valueB = (Comparable) map.get(o2);
int res = 0;
if (valueA.compareTo(valueB) < 0) {
res = 1;
} else if (valueA.compareTo(valueB) > 0) {
res = -1;
} else {
res = 0;
}
return res;
}
@覆盖
公共整数比较(对象o1、对象o2){
可比值a=(可比)map.get(o1);
可比值b=(可比)map.get(o2);
int res=0;
如果(值A.与(值B)相比<0){
res=1;
}如果(值A.与(值B)>0相比){
res=-1;
}否则{
res=0;
}
返回res;
}
您可以使用番石榴创建有序多重地图。这会对同一个键中的值进行排序,但如果需要按值对迭代进行排序,那么最好的方法是交换键和值(并放弃按键查找的功能)。只需再次阅读您想要获得的内容
您需要有序的值
(2,1)
(3,1)
(1,2)
(4,2)
什么时候,在什么情况下你想要?我认为您需要切换键和值,并获取有序的键集合
对于副本,我将使用集合。大概是这样的:
1->(2,3)
2->(1,4)
比如:
LinkedHashSet<Integer, ArrayList<Integer>>
LinkedHashSet
您能用TreeMap
的使用方式显示您的代码吗?@RohitJainTreeMap
不允许重复值显示具有相同值的条目以供订购吗?在您的示例中,订购[(3,1)、(2,1)、(1,2)、(4,2)]
是否可以接受?我想知道收藏是否是“工具、库或喜爱的非现场资源”?@SimonAndréForsberg它不允许重复密钥。值,当然可以。据我所知,TreeMultiMap
只提供对键的排序,而不是对值的排序。@TedHopp javadoc的第一句话:“实现多映射,其键和值按其自然排序或按提供的比较器排序。”(重点补充)@yshavit-指由get
和其他与单个键相关的方法返回的集合顺序。请告诉我们什么API调用将为按值排序的整个集合返回迭代器(这是OP要求的)。@ChrisJester Young-那么这应该是您的答案。说“使用TreeMultimap
”,当它不能(直接)完成OP需要的工作时,并且没有解释如何在TreeMultimap
上构建解决方案,这并不是一个很好的答案。要完成我认为OP的要求(似乎建议按键查找),您需要两个对象:一个Map
go key->val和一个TreeMultimap
go val->[keys]。对于完全封装,最好将它们都作为支持高级操作(put、get by key、按值排序的键值对迭代等)的新类的私有字段。