代码之家  ›  专栏  ›  技术社区  ›  Prof. Falken

如何在Java中对哈希映射的值进行排序并保留重复的条目?

  •  2
  • Prof. Falken  · 技术社区  · 14 年前

    我一直在找这个问题的答案,但找不到答案。所以我想我可以和大家分享。我想按值排序,而不是按键。

    3 回复  |  直到 8 年前
        1
  •  3
  •   Can't Tell    14 年前

    This 是一种可以使用的不同方法。比较器中的compare()方法在equal上不返回0。这将保留重复条目。

        2
  •  2
  •   Prof. Falken    8 年前

    答案,我发现 here .

        public LinkedHashMap sortHashMapByValuesD(HashMap passedMap) {
        List mapKeys = new ArrayList(passedMap.keySet());
        List mapValues = new ArrayList(passedMap.values());
        Collections.sort(mapValues);
        Collections.sort(mapKeys);
    
        LinkedHashMap sortedMap = 
            new LinkedHashMap();
    
        Iterator valueIt = mapValues.iterator();
        while (valueIt.hasNext()) {
            Object val = valueIt.next();
            Iterator keyIt = mapKeys.iterator();
    
            while (keyIt.hasNext()) {
                Object key = keyIt.next();
                String comp1 = passedMap.get(key).toString();
                String comp2 = val.toString();
    
                if (comp1.equals(comp2)){
                    passedMap.remove(key);
                    mapKeys.remove(key);
                    sortedMap.put((String)key, (Double)val);
                    break;
                }
            }
        }
    
        return sortedMap;
    }
    
        3
  •  1
  •   Balaji    12 年前
    public LinkedHashMap sortHashMapByValuesD(HashMap passedMap) {
    List mapKeys = new ArrayList(passedMap.keySet());
    List mapValues = new ArrayList(passedMap.values());
    Collections.sort(mapValues);
    Collections.sort(mapKeys);
    
    LinkedHashMap sortedMap = 
        new LinkedHashMap();
    
    Iterator valueIt = mapValues.iterator();
    while (valueIt.hasNext()) {
        Object val = valueIt.next();
        Iterator keyIt = mapKeys.iterator();
    
        while (keyIt.hasNext()) {
            Object key = keyIt.next();
            String comp1 = passedMap.get(key).toString();
            String comp2 = val.toString();
    
            if (comp1.equals(comp2)){
                passedMap.remove(key);
                mapKeys.remove(key);
                sortedMap.put((String)key, (Double)val);
                break;
            }
    
        }
    
    }
    return sortedMap;
    

    }