栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

1. values():

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

import java.util.*;

public class Main{
  public static void main(String[] args){
    Map map = new HashMap();  //构建键值对为的Map集合
    map.put("a", "aaa");
    map.put("b", "bbb");
    map.put("c", "ccc");

    Collection collection = map.values();  //获取map集合的所有value的Collection集合(于集合中无序存放)
    System.out.println(collection);
  }
}

2. keySet():

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

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

import java.util.*;

public class Main{
  public static void main(String[] args){
    Map map = new HashMap();  //构建键值对为的Map集合
    map.put("a", "aaa");
    map.put("b", "bbb");
    map.put("c", "ccc");

    Set keySet = map.keySet();  //获取map集合的所有键的Set集合(于Set集合中无序存放)
    Iterator iter = keySet.iterator();  //获取keySet集合的迭代器
    while(iter.hasNext()){
      String key = iter.next();
      String value = map.get(key);
      System.out.println("key:" + key + "-->value:" + value);
    }
    
  }
}

3. entrySet():

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

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

import java.util.*;

public class Main{
  public static void main(String[] args){
    Map map = new HashMap();  //构建键值对为的Map集合
    map.put("a", "aaa");
    map.put("b", "bbb");
    map.put("c", "ccc");

    Set> entrySet = map.entrySet();  //获取map集合的所有"映射"的Set集合,这里规范每个映射的类型为Map.Entry(于Set集合中无序存放)
    Iterator> iter = entrySet.iterator();  //获取entrySet集合的迭代器,Map.Entry为迭代元素的类型
    while(iter.hasNext()){
      Map.Entry item = iter.next();
      String key = item.getKey();
      String value = item.getValue();
      System.out.println("key:" + key + "-->value:" + value);
    }
    
  }
}

有以上方法作为基础,那么我们很容易想到对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{
  public static void main(String[] args){
    Map map = new HashMap();  //构建键值对为的Map集合
    map.put("a", "aaa");
    map.put("b", "bbb");
    map.put("c", "ccc");

    Set entrySet = map.keySet();  //获取map集合的所有键的Set集合(于Set集合中无序存放)
    List list = new ArrayList(entrySet);  //新建List集合获取Set集合的所有元素(键对象)(顺序与Set集合一样)
    
    Collections.sort(list, new DescKeyComparator());
    
    Iterator iter = list.iterator();  //获取List集合的迭代器,String为迭代元素的类型
    while(iter.hasNext()){
      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方法被设计成小于、等于、大于分别返回负数、零、正数
  }
}

import java.util.*;

public class AscKeyComparator implements Comparator>{
  public static void main(String[] args){
    Map map = new HashMap();  //构建键值对为的Map集合
    map.put("a", "aaa");
    map.put("b", "bbb");
    map.put("c", "ccc");

    Set> entrySet = map.entrySet();  //获取map集合的所有"映射"的Set集合,这里规范每个映射的类型为Map.Entry(于Set集合中无序存放)
    List> list = new ArrayList>(entrySet);  //新建List集合获取Set集合的所有元素("映射"对象)(顺序与Set集合一样)
    
    Collections.sort(list, new AscKeyComparator());

    Iterator> iter = list.iterator();  //获取List集合的迭代器,Map.Entry为迭代元素的类型
    while(iter.hasNext()){
      Map.Entry item = iter.next();
      String key = item.getKey();
      String value = item.getValue();
      System.out.println("key:" + key + "-->value:" + value);
    }
    
  }

  @Override
  public int compare(Map.Entry item1, Map.Entry item2){
    return item1.getKey().compareTo(item2.getKey());  //升序排序
  }
}

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/130789.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号