Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.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 基于键的hashmap排序_Java_Hashmap - Fatal编程技术网

Java 基于键的hashmap排序

Java 基于键的hashmap排序,java,hashmap,Java,Hashmap,我有以下java hashmap: {B046=0.0,A061=3.0,A071=0.0,B085=0.0,B075=3.0,B076=9.0,B086=3.0,B095=0.0,B096=0.0,A052=0.0,B066=0.0,B056=9.0,B065=0.0,B055=9.0} 我应该如何对hashmap进行排序,以便考虑字母表和数字 生成的hashmap应如下所示: {A052=0.0,A061=3.0,A071=0.0,B046=0.0,B055=9.0,B056=9.0,B06

我有以下java hashmap:

{B046=0.0,A061=3.0,A071=0.0,B085=0.0,B075=3.0,B076=9.0,B086=3.0,B095=0.0,B096=0.0,A052=0.0,B066=0.0,B056=9.0,B065=0.0,B055=9.0}

我应该如何对hashmap进行排序,以便考虑字母表和数字

生成的hashmap应如下所示:

{A052=0.0,A061=3.0,A071=0.0,B046=0.0,B055=9.0,B056=9.0,B065=0.0,B066=0.0,B075=3.0,B076=9.0,B085=0.0,B086=3.0,B095=0.0,B096=0.0}


谢谢你的帮助

使用排序的
树形图

Map<String, Float> map = new TreeMap<>(yourMap);
Map Map=newtreemap(yourMap);
它会自动将条目按键排序。我认为自然
字符串
订购对您来说是可以的


请注意,由于查找优化而导致的
HashMap
不会保留顺序。

使用一个,尽管拥有一个“看起来像那样”的映射有点模糊——您也可以根据您的条件对键进行排序,然后在映射上迭代,检索每个对象。

只需使用一个
树映射即可。它实现了
SortedMap
接口,从而自动对包含的密钥进行排序。您的键可以按字母顺序排序以获得所需的结果,因此您甚至不需要提供比较器

class MyComparator implements Comparator<String>
    {
        public int compare(String o1,String o2)
        {
            // Your logic for comparing the key strings
        }
    }

TreeMap<String, Float> tm = new TreeMap<String , Float>(new MyComparator());

哈希映射从不排序。使用HashMap所能做的唯一一件事就是获取所有键,并将它们存储在一个排序集或列表中,然后对列表进行排序。

使用带有自定义比较器的树映射

class MyComparator implements Comparator<String>
    {
        public int compare(String o1,String o2)
        {
            // Your logic for comparing the key strings
        }
    }

TreeMap<String, Float> tm = new TreeMap<String , Float>(new MyComparator());
类MyComparator实现比较器
{
公共整数比较(字符串o1、字符串o2)
{
//用于比较键字符串的逻辑
}
}
TreeMap tm=新的TreeMap(新的MyComparator());
添加新元素时,它们将自动排序


在您的例子中,甚至可能没有必要实现一个比较器,因为字符串排序可能就足够了。但是,如果您想实现特殊情况,例如小写字母出现在大写字母之前,或者以某种方式处理数字,请使用比较器。

TreeMap
是此类排序的最佳选择(自然)
TreeMap
根据键自然排序

class MyComparator implements Comparator<String>
    {
        public int compare(String o1,String o2)
        {
            // Your logic for comparing the key strings
        }
    }

TreeMap<String, Float> tm = new TreeMap<String , Float>(new MyComparator());

HashMap
不会保留插入顺序,也不会对映射进行排序
LinkedHashMap
保留插入顺序,但不会自动对映射排序。只有
Map
界面中的
TreeMap
可以根据自然顺序(首先是数字,其次是大写字母,最后是小写字母)对地图进行排序。

使用TreeMap可以对地图进行排序

Map<String, String> map = new HashMap<String, String>();        
Map<String, String> treeMap = new TreeMap<String, String>(map);
//show hashmap after the sort
for (String str : treeMap.keySet()) {
    System.out.println(str);
}
Map Map=newhashmap();
Map treeMap=新的treeMap(Map);
//排序后显示hashmap
对于(字符串str:treeMap.keySet()){
系统输出打印项次(str);
}

您可以使用
TreeMap
以排序形式存储值

Map <String, String> map = new TreeMap <String, String>();
Map Map=newtreemap();

TreeMap将自动按升序排序。如果要按降序排序,请使用以下代码:

在类内和主执行方法外复制以下代码:

static class DescOrder implements Comparator<String> {
    @Override
    public int compare(String o1, String o2) {      
        return o2.compareTo(o1);
    }
    }
静态类DescOrder实现比较器{
@凌驾
公共整数比较(字符串o1,字符串o2){
返回o2.compareTo(o1);
}
}
那么在你的逻辑中:

TreeMap<String, String> map = new TreeMap<String, String>(new DescOrder());
map.put("A", "test1");
map.put("C", "test3");
map.put("E", "test5");
map.put("B", "test2");
map.put("D", "test4");
TreeMap map=newtreemap(newdescorder());
地图放置(“A”、“测试1”);
地图放置(“C”、“测试3”);
地图放置(“E”、“测试5”);
地图放置(“B”、“测试2”);
地图放置(“D”、“测试4”);
使用树形图(构造函数):

Map<String, Float> sortedMap = new TreeMap<>(yourMap);
Map<String, Float> sortedMap = new TreeMap<>();
sortedMap.putAll(yourMap);
Map sortedMap=newtreemap(yourMap);
使用TreeMap(PutAll方法):

Map<String, Float> sortedMap = new TreeMap<>(yourMap);
Map<String, Float> sortedMap = new TreeMap<>();
sortedMap.putAll(yourMap);
Map sortedMap=newtreemap();
sortedMap.putAll(您的地图);
地图界面的实现:

Map<String, Float> sortedMap = new TreeMap<>(yourMap);
Map<String, Float> sortedMap = new TreeMap<>();
sortedMap.putAll(yourMap);
  • TreeMap-插入时自动按升序对键进行排序
  • HashMap-将不维护插入顺序
  • LinkedHashMap-将保留插入顺序

  • hashmap用于查找。它把事情搞得一团糟。它不能维持秩序。@HasanKhan..是谁问的?嗨@Tomasz Nurkiewicz我怎么能得到相反的秩序?我能应用我自己的comparatorGreat解决方案吗!有一个带有2个数字编号的prob,排序为1、10、11、12、2、3、4、5。有什么解决办法吗?@Rachitanda,你可以试着用整数而不是字符串来存储数字。这对我有用。