【问题标题】:Sort <String,Double> HashMap using comparator and without TreeMap使用比较器和不使用 TreeMap 对 <String,Double> HashMap 进行排序
【发布时间】:2021-09-26 08:26:51
【问题描述】:

试图在不使用 treeMap 或其他方法的情况下对 的 HashMap 进行排序。需要代码以最快的时间传递一个hashMap,返回一个排序好的hashMap。我对字符串比较器做错了什么。请看和指教。非常感谢!!!

/// Here's the main
package Sort_String_Double_without_TreeMap;


import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;

public class Main {

    public static void main(String[] args) throws InterruptedException {

        Map<String, Double> outGoing = new HashMap<>();

        outGoing.put("J", -5.0);
        outGoing.put("X", 0.7);
        outGoing.put("C", 0.0);
        outGoing.put("D", 80.0);
        outGoing.put("A", 80.0);
        
        
        System.out.println("---UNSORTED---");

        System.out.println(outGoing);

        TimeUnit.SECONDS.sleep(1);
    

        Helper_SorterClass sorter = new Helper_SorterClass ();

        System.out.println("---SORTED---");
        System.out.println();

        System.out.println("SIZE= " + sorter.SortHashMapKey(outGoing).size());
        
        System.out.println(sorter.SortHashMapKey(outGoing));

    }

    
    
}

这是另一个类...

/// Here's the helper class

package Sort_String_Double_without_TreeMap;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class Helper_SorterClass {


public Map<String, Double> SortHashMapKey(Map<String, Double> unsortedMap) {

        List<String> list = new ArrayList(unsortedMap.keySet());
        
        Collections.sort(list, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                
                return String.valueOf(o1).compareTo(String.valueOf(o2));
                
            }
        });

        Map<String, Double> sortedMap = new HashMap<>();
        for (String keys : list) {
            sortedMap.put(keys, unsortedMap.get(keys));
            }
        return sortedMap;
    }
}

很遗憾输出错误。

run:
---UNSORTED---
{A=80.0, C=0.0, D=80.0, X=0.7, J=-5.0}
---SORTED---

SIZE= 5
{A=80.0, C=0.0, D=80.0, X=0.7, J=-5.0}
BUILD SUCCESSFUL (total time: 1 second)

【问题讨论】:

    标签: java string hashmap comparator


    【解决方案1】:
        Map<String, Double> sortedMap = new HashMap<>();
        for (String keys : list) {
             sortedMap.put(keys, unsortedMap.get(keys));
        }
    

    您应该使用 LinkedHashMap 而不是 HashMap,如下所示:

        Map<String, Double> sortedMap = new LinkedHashMap<>();
        for (String keys : list) {
             sortedMap.put(keys, unsortedMap.get(keys));
        }
    

    HashMap 不维护插入顺序。因此,一旦您在比较后将条目放入新的 HashMap() 中,当您遍历新地图时,它将再次给出未排序的结果。但是如果你使用 LinkedHashMap,它会在迭代时保持插入顺序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-03
      • 2018-11-25
      • 1970-01-01
      • 1970-01-01
      • 2016-11-08
      • 2014-03-01
      • 1970-01-01
      相关资源
      最近更新 更多