Java 对HashMap进行排序的三种常见方法

首先来看看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
 */

以上就是Java 对HashMap进行排序的三种常见方法的详细内容,更多关于Java 对HashMap进行排序的资料请关注我们其它相关文章!

(0)

相关推荐

  • Java使用LinkedHashMap进行分数排序

    分数排序的特殊问题 在java中实现排序远比C/C++简单,我们只要让集合中元素对应的类实现Comparable接口,然后调用Collections.sort();方法即可. 这种方法对于排序存在许多相同元素的情况有些浪费,明显即使值相等,两个元素之间也要比较一下,这在现实中是没有意义的. 典型例子就是学生成绩统计的问题,例如高考中,满分是150,成千上万的学生成绩都在0-150之间,平均一个分数的人数成百上千,这时如果排序还用传统方法明显就浪费了. 进一步思考 成绩既然有固定的分数等级,我们可

  • 关于Java HashMap自动排序的简单剖析

    1.HashMap概述 HashMap是无序的,这里无序的意思是你取出数据的顺序与你存入数据的顺序不同 2.发现问题 当尝试向HashMap中存入int类型的key,可以看到在输出的时候会自动排序 HashMap<Integer, String> map = new HashMap<>(); map.put(3, "asdf"); map.put(2, "asdf"); map.put(1, "asdf"); map.pu

  • Java HashMap两种简便排序方法解析

    这篇文章主要介绍了Java HashMap两种简便排序方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 HashMap的储存是没有顺序的,而是按照key的HashCode实现. key=手机品牌,value=价格,这里以这个例子实现按名称排序和按价格排序. Map phone=new HashMap(); phone.put("Apple",8899); phone.put("SAMSUNG",7000);

  • 举例详解Java编程中HashMap的初始化以及遍历的方法

    一.HashMap的初始化 1.HashMap 初始化的文艺写法    HashMap 是一种常用的数据结构,一般用来做数据字典或者 Hash 查找的容器.普通青年一般会这么初始化: HashMap<String, String> map = new HashMap<String, String>(); map.put("Name", "June"); map.put("QQ", "2572073701"

  • Java8 HashMap的实现原理分析

    前言:Java8之后新增挺多新东西,在网上找了些相关资料,关于HashMap在自己被血虐之后痛定思痛决定整理一下相关知识方便自己看.图和有些内容参考的这个文章:http://www.jb51.net/article/80446.htm HashMap的存储结构如图:一个桶(bucket)上的节点多于8个则存储结构是红黑树,小于8个是单向链表. 1:HashMap的一些属性 public class HashMap<k,v> extends AbstractMap<k,v> impl

  • java遍历HashMap简单的方法

    本文实例讲述了java遍历HashMap简单的方法.分享给大家供大家参考.具体实现方法如下: import java.util.HashMap; import java.util.Iterator; import java.util.Set; public class HashSetTest { public static void main(String[] args) { HashMap map = new HashMap(); map.put("a", "aa"

  • Java 对HashMap进行排序的三种常见方法

    首先来看看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>(); //构建键

  • Java操作excel的三种常见方法实例

    前言 在平时的业务系统开发中,少不了需要用到导出.导入excel功能,今天我们就一起来总结一下! 下面给大家介绍一下几种常用方法: apache poi easypoi easyexcel 一.Apache poi 大概在很久很久以前,微软的电子表格软件 Excel 以操作简单.存储数据直观方便,还支持打印报表,在诞生之初,可谓深得办公室里的白领青睐,极大的提升了工作的效率,不久之后,便成了办公室里的必备工具. 随着更多的新语言的崛起,例如我们所熟悉的 java,后来便有一些团队开始开发一套能与

  • Python软件包安装的三种常见方法

    目录 前言 1.复制源代码到系统目录 2.使用PIP进行安装 1) 安装 2) 卸载 3) 查看已经安装的包 4) 查看某个包的详细情况 5) 查看服务器上的包信息 3.使用easy_install和setup进行安装 总结 前言 有些 Python 软件包是系统自带的,如 sys,这些包在安装 Python 时已自动安装.但有些包是需要自行下载安装的,如 PIL.这些第三方的软件有的以源代码的形式提供,有的以安装包的形式提供. 安装第三方 Python 包的方法有很多种.本节将介绍一些常见的方

  • Java实现HashMap排序方法的示例详解

    目录 简介 排序已有数据 按key排序 按value排序 按插入顺序存放 HashMap不按插入顺序存放 LinkedHashMap会按照插入顺序存放 简介 本文用示例介绍HashMap排序的方法. 排序已有数据 按key排序 使用stream进行排序(按key升序/降序) package org.example.a; import java.util.*; public class Demo { public static void main(String[] args) { Map<Stri

  • Java中HashMap和TreeMap的区别深入理解

    首先介绍一下什么是Map.在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value.这就是我们平时说的键值对. HashMap通过hashcode对其内容进行快速查找,而 TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的). HashMap 非线程安全 TreeMap 非线程安全 线程安全 在Java里,线程安全一般体

  • java 中HashMap、HashSet、TreeMap、TreeSet判断元素相同的几种方法比较

    java 中HashMap.HashSet.TreeMap.TreeSet判断元素相同的几种方法比较 1.1     HashMap 先来看一下HashMap里面是怎么存放元素的.Map里面存放的每一个元素都是key-value这样的键值对,而且都是通过put方法进行添加的,而且相同的key在Map中只会有一个与之关联的value存在.put方法在Map中的定义如下. V put(K key, V value); 它用来存放key-value这样的一个键值对,返回值是key在Map中存放的旧va

  • Java Map 按key排序和按Value排序的实现方法

    一.理论准备 Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等. TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法. HashMap的值是没有顺序的,它是按照key的HashCode来实现的,对于这个无序的HashMap我们要怎么来实现排序呢?参照TreeM

  • Java Map 按Key排序实例代码

    Java Map 按Key排序 有时候我们业务上需要对map里面的值按照key的大小来进行排序的时候我们就可以利用如下方法来进行排序了, package test; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.List; impo

  • Java Map 按照Value排序的实现方法

    Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等. •TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法. •HashMap的值是没有顺序的,它是按照key的HashCode来实现的,对于这个无序的HashMap我们要怎么来实现排序呢?参照TreeMap的va

随机推荐