首先来看看Map集合获取元素的三种常见方法keySet()、values()、entrySet()

1. values():返回map集合的所有value的Collection集合(于集合中无序存放)

 import java.util.*;

 public class Main{
public static void main(String[] args){
Map<String, String> map = new HashMap<String, String>(); //构建键值对为<String, String>的Map集合
map.put("a", "aaa");
map.put("b", "bbb");
map.put("c", "ccc"); Collection<String> collection = map.values(); //获取map集合的所有value的Collection集合(于集合中无序存放)
System.out.println(collection);
}
} /**
* 运行结果
* [bbb, ccc, aaa]
*/

2. keySet():返回map集合的所有键的Set集合(于Set集合中无序存放)

通过迭代取出所有key,再利用get()方法获取value, for(类型 元素: 集合) 的本质是获取集合的迭代器进行迭代

 import java.util.*;

 public class Main{
public static void main(String[] args){
Map<String, String> map = new HashMap<String, String>(); //构建键值对为<String, String>的Map集合
map.put("a", "aaa");
map.put("b", "bbb");
map.put("c", "ccc"); Set<String> keySet = map.keySet(); //获取map集合的所有键的Set集合(于Set集合中无序存放)
Iterator<String> iter = keySet.iterator(); //获取keySet集合的迭代器
while(iter.hasNext()){
String key = iter.next();
String value = map.get(key);
System.out.println("key:" + key + "-->value:" + value);
}
/*
for(String key: keySet){
String value = map.get(key);
System.out.println("key:" + key + "-->value:" + value);
}
*/
}
} /**
* 运行结果
* key:b-->value:bbb
* key:c-->value:ccc
* key:a-->value:aaa
*/

3. entrySet():返回map集合的所有"映射"的Set集合,这里规范每个"映射"的类型为Map.Entry<K, V>(于Set集合中无序存放)

通过迭代取出所有的“映射”,再利用getKey()、getValue()方法获取相应键、值

 import java.util.*;

 public class Main{
public static void main(String[] args){
Map<String, String> map = new HashMap<String, String>(); //构建键值对为<String, String>的Map集合
map.put("a", "aaa");
map.put("b", "bbb");
map.put("c", "ccc"); Set<Map.Entry<String, String>> entrySet = map.entrySet(); //获取map集合的所有"映射"的Set集合,这里规范每个映射的类型为Map.Entry<K, V>(于Set集合中无序存放)
Iterator<Map.Entry<String, String>> iter = entrySet.iterator(); //获取entrySet集合的迭代器,Map.Entry<K, V>为迭代元素的类型
while(iter.hasNext()){
Map.Entry<String, String> item = iter.next();
String key = item.getKey();
String value = item.getValue();
System.out.println("key:" + key + "-->value:" + value);
}
/*
for(Map.Entry<String, String> item: entrySet){
String key = item.getKey();
String value = item.getValue();
System.out.println("key:" + key + "-->value:" + value);
}
*/
}
} /**
* 运行结果
* key:b-->value:bbb
* key:c-->value:ccc
* key:a-->value:aaa
*/

有以上方法作为基础,那么我们很容易想到对HashMap进行排序的两种方法

1. 通过keySet()获取Map集合的所有键的Set集合,由List集合获取其中所有元素,通过比较器对元素为键的List集合进行排序

2. 通过entrySet()获取Map集合所有映射的Set集合,由List集合获取其中所有元素,通过比较器对元素为"映射"List集合进行排序

通过对比较器compare方法的Override,两者还可以实现利用value进行排序。有关java中Comparable和Comparator比较的详解

 import java.util.*;

 public class DescKeyComparator implements Comparator<String>{
public static void main(String[] args){
Map<String, String> map = new HashMap<String, String>(); //构建键值对为<String, String>的Map集合
map.put("a", "aaa");
map.put("b", "bbb");
map.put("c", "ccc"); Set<String> entrySet = map.keySet(); //获取map集合的所有键的Set集合(于Set集合中无序存放)
List<String> list = new ArrayList<String>(entrySet); //新建List集合获取Set集合的所有元素(键对象)(顺序与Set集合一样)
/**
* 接下来的排序是list的专长了
* 通过“比较器(DescKeyComparator)”,对list进行排序
*/
Collections.sort(list, new DescKeyComparator());
/*
Collections.sort(list); //String实现了Comparable,默认升序排列
*/
Iterator<String> iter = list.iterator(); //获取List集合的迭代器,String为迭代元素的类型
while(iter.hasNext()){
String key = iter.next();
String value = map.get(key);
System.out.println("key:" + key + "-->value:" + value);
}
/*
for(Map.Entry<String, String> item: list){
String key = iter.next();
String value = map.get(key);
System.out.println("key:" + key + "-->value:" + value);
}
*/
} @Override
public int compare(String key1, String key2){
return key2.compareTo(key1); //降序排序; String作为api提供的类,实现了Comparable的compareTo方法被设计成小于、等于、大于分别返回负数、零、正数
}
} /**
* 运行结果
* key:c-->value:ccc
* key:b-->value:bbb
* key:a-->value:aaa
*/
 import java.util.*;

 public class AscKeyComparator implements Comparator<Map.Entry<String, String>>{
public static void main(String[] args){
Map<String, String> map = new HashMap<String, String>(); //构建键值对为<String, String>的Map集合
map.put("a", "aaa");
map.put("b", "bbb");
map.put("c", "ccc"); Set<Map.Entry<String, String>> entrySet = map.entrySet(); //获取map集合的所有"映射"的Set集合,这里规范每个映射的类型为Map.Entry<K, V>(于Set集合中无序存放)
List<Map.Entry<String, String>> list = new ArrayList<Map.Entry<String, String>>(entrySet); //新建List集合获取Set集合的所有元素("映射"对象)(顺序与Set集合一样)
/**
* 接下来的排序是list的专长了
* 通过“比较器(AscKeyComparator)”,对list进行排序
*/
Collections.sort(list, new AscKeyComparator()); Iterator<Map.Entry<String, String>> iter = list.iterator(); //获取List集合的迭代器,Map.Entry<K, V>为迭代元素的类型
while(iter.hasNext()){
Map.Entry<String, String> item = iter.next();
String key = item.getKey();
String value = item.getValue();
System.out.println("key:" + key + "-->value:" + value);
}
/*
for(Map.Entry<String, String> item: list){
String key = item.getKey();
String value = item.getValue();
System.out.println("key:" + key + "-->value:" + value);
}
*/
} @Override
public int compare(Map.Entry<String, String> item1, Map.Entry<String, String> item2){
return item1.getKey().compareTo(item2.getKey()); //升序排序
}
} /**
* 运行结果
* key:a-->value:aaa
* key:b-->value:bbb
* key:c-->value:ccc
*/

对HashMap进行排序的更多相关文章

  1. 如何对一个不断更新的HashMap进行排序

    如何对一个不断更新的HashMap进行排序? 解答:等到HashMap更新稳定后,用ArrayList包装进行排序.或者自己写一个可以类似HashMap的有序Map,每次更新的时候都进行排序,构建自己 ...

  2. HashMap按键排序和按值排序

    对map集合进行排序   今天做统计时需要对X轴的地区按照地区代码(areaCode)进行排序,由于在构建XMLData使用的map来进行数据统计的,所以在统计过程中就需要对map进行排序. 一.简单 ...

  3. TreeMap/LinkedHashMap/HashMap按键排序和按值排序

    今天做统计时需要对X轴的地区按照地区代码(areaCode)进行排序,由于在构建XMLData使用的map来进行数据统计的,所以在统计过程中就需要对map进行排序. 一.简单介绍Map 在讲解Map排 ...

  4. Java List/HashSet/HashMap的排序

    在对Java无序类集合,如List(ArrayList/LinkedList).HashSet(TreeSet有序).HashMap等排序时,Java中一个公共的类Collections,提供了对Ja ...

  5. 关于hashmap的排序

    刚学java不久 之前在学习hashmap的时候 无意间发现,诶?怎么结果是排序的,然后重新输入了好多次,握草,原来java 1.8都实现了hashmap的排序 天真的我没有去网上查,没有去想java ...

  6. java中hashMap的排序

    hashMap排序,示例: private void test(){ Map<String, List<String>> unSupportedDatesMap=new Has ...

  7. Java HashMap 默认排序

    先看一段Java代码. package com.m58.test; import java.text.ParseException; import java.text.SimpleDateFormat ...

  8. java 中对hashmap进行排序

    public class HashMapSort { public static void main(String[] args) { HashMap<Integer, Student> ...

  9. HashMap集合排序方法

    首先我们先来看看Map集合获取元素的三种常见方法(1)entrySet(),(2)keySet(),(3)values() 1. entrySet():(1)先返回map集合的所有"映射&q ...

随机推荐

  1. Faster Alternatives to glReadPixels and glTexImage2D in OpenGL ES

    In the development of Shou, I’ve been using GLSL with NEON to manipulate image rotation, scaling and ...

  2. React Native IOS ---基础环境搭建(前端架构师)

    React Native -IOS 开发环境搭建 web架构(基础) 安装依赖 * 必须安装的依赖有:Node.Watchman 和 React Native 命令行工具以及 Xcode. npm 镜 ...

  3. 关于swing界面label和button的动态设置文字

    在引入发送验证码功能后,想让button的文本动态变化,发现如下方法并不能做到: int limitSec=10; while(limitSec>0){ sendyzhm.setEnabled( ...

  4. vue入门学习示例

    鄙人一直是用angular框架的,所以顺便比较了一下. <!DOCTYPE html> <html lang="en"> <head> < ...

  5. DQL-子查询

    一:含义 嵌套在其他语句内部的select语句称之为子查询或内查询 外套的语句还可以是 insert,update,delete,一般用select比较多 外面如果是select语句,我们称之为外查询 ...

  6. CGAffineTransform 视频旋转(转)

    记录下视频旋转 ////////////////////////////////////////////// - (void)test:(NSURL *)url transformUrl:(NSURL ...

  7. acm--1006

    Problem Description The three hands of the clock are rotating every second and meeting each other ma ...

  8. 竞赛题解 - Ikki's Story IV-Panda's Trick

    Ikki's Story IV-Panda's Trick - 竞赛题解 也算是2-sat学习的一个节点吧 终于能够自己解决一道2-sat的题了 ·题目 一个圆上有n个点按顺时针编号为 0~n-1 , ...

  9. Excel2013打开提示 文件格式和扩展名不匹配。文件可能已损坏或不安全。除非您信任其来源,否则请勿打开。是否仍要打开它?

    有的时候打开xls文档时,会提示“文件格式和扩展名不匹配.文件可能已损坏或不安全.除非您信任其来源,否则请勿打开.是否仍要打开它?” 遇到这种情况,我们需要 1.win键+R键,打开“运行“,输入re ...

  10. CentOS7安装.Net Core2.2

    一.安装.Dotnet Core 2.2 Runtime Linux上运行Dotnet  Core程序的前提是安装Dotnet Core Runtime .Net Core对不同的Linux版本提示了 ...