Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有重复值(键、值)的有序集合_Java_Collections - Fatal编程技术网

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
    的使用方式显示您的代码吗?@RohitJain
    TreeMap
    不允许重复值显示具有相同值的条目以供订购吗?在您的示例中,订购
    [(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、按值排序的键值对迭代等)的新类的私有字段。