软件编程
位置:首页>> 软件编程>> java编程>> Java 对HashMap进行排序的三种常见方法

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

作者:小z同学  发布时间:2022-11-04 19:02:10 

标签: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
*/

来源:https://www.cnblogs.com/zzzz76/p/6891698.html

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com