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,B065=0.0,B066=0.0,B075=3.0,B076=9.0,B085=0.0,B086=3.0,B095=0.0,B096=0.0}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
谢谢你的帮助 使用排序的
树形图
:
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,你可以试着用整数而不是字符串来存储数字。这对我有用。