欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-23 11:25:38
首先来看看map集合获取元素的三种常见方法keyset()、values()、entryset()1. values():返回map集合的所有value的collection集合(于集合中无序存放)i...

首先来看看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进行排序的资料请关注其它相关文章!