`

Hashmap按照value值的排序(hashmap sort by value)

    博客分类:
  • java
阅读更多
今天做的时候用到了HashMap,其中类型为<String,Integer>。需要将存在HashMap中的数据按照value排序,并将排序后的key输出出来。网上搜了一下发现绝大部分都是将HashMap按照key排序,于是想出了一个解决方案,记录下来方便以后使用,也方便大家交流。
原理如下:通过HashMap.entrySet()获得Map.Entry的集合。将这个集合存储到ArrayList<Map.Entry<String, Integer>>.这时通过Collections.sort()排序。用sort方法排序需要创建实现Comparator接口的比较器。
代码片段如下:
public clsaa SortMap
{
public List<String> sortMapByValue(HashMap<String,Integer> map)
	{
		int size = map.size();
		ArrayList<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String, Integer>>(size);
		list.addAll(map.entrySet());
		ValueComparator vc = new ValueComparator();
		Collections.sort(list, vc);
		final List<String> keys = new ArrayList<String>(size);
	    for (int i = 0; i < size; i++) {
	        keys.add(i, list.get(i).getKey());
	    }
	    return keys;	
	}
	private class ValueComparator implements Comparator<Map.Entry<String, Integer>>
	{
		public int compare(Map.Entry<String, Integer> mp1, Map.Entry<String, Integer> mp2) 
		{
	        return mp1.getValue() - mp2.getValue();
	    }
	}
	public static void main(String [] args)
	{
		Map<String,Integer> first = new HashMap<String,Integer>();
		first.put("20030120" , new Integer (56));  
        first.put("20030118" , new Integer (19));  
        first.put("20030125" , new Integer (25));  
        first.put("20030122" , new Integer (32));  
        first.put("20030117" , new Integer (67));  
        first.put("20030123" , new Integer (34));  
        first.put("20030124" , new Integer (42));  
        first.put("20030121" , new Integer (19));  
        first.put("20030119" , new Integer (98));
        SortMap pd = new SortMap();
        List<String> cixu = pd.sortMapByValue((HashMap<String,Integer>)first);
        Iterator<String> ite = cixu.iterator();
        while(ite.hasNext())
        {
        	System.out.println(ite.next());
        }
        
	}
}

分享到:
评论
2 楼 zhidde 2013-07-25  
还是使用TreeMap方便些
http://stackoverflow.com/questions/109383/how-to-sort-a-mapkey-value-on-the-values-in-java
1 楼 Ziven09 2011-08-25  
很不错,采用链表排序,辛苦了……

相关推荐

    Hashmap 通过对VALUE排序 源代码

    3. 手动排序:你可以遍历HashMap,获取所有的value,然后使用Collections.sort()方法,传入自定义的Comparator对值进行排序。排序后,可以将结果存储到一个新的数据结构中,如ArrayListMultimap(Guava库提供)或者...

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

    当我们需要按照Value(值)对Map进行排序时,通常会采用特定的方法。以下是关于Java Map按照Value排序的实现方法的详细说明: 1. **HashMap**: - HashMap是基于哈希表实现的,它不保证元素的顺序,插入顺序和遍历...

    HASHMAP排序功能描述

    在某些场景下,我们可能需要对HashMap进行排序,例如按照key的值或key的自然顺序进行排序。本文将详细介绍如何对HashMap进行排序以及相关的知识点。 **1. HashMap的特点** HashMap的核心特点是其内部通过哈希函数来...

    浅谈Java之Map 按值排序 (Map sort by value)

    然而,标准的Map实现如HashMap、TreeMap等,并不支持按值排序。如果你需要一个按值排序的Map,需要采取一些额外的策略。这里我们将探讨如何在Java中实现按值排序的Map,特别关注“按值排序”这一需求。 首先,标准...

    对Map按key和value分别排序

    以下代码展示了如何使用 Collections 的 sort 方法实现 Map 按 value 排序: ```java List, String&gt;&gt; list = new ArrayList(map.entrySet()); Collections.sort(list, new Comparator, String&gt;&gt;() { public int ...

    JCF(List、Set、Map)学习,实现了<key,value>按value排序噢

    默认按照元素的自然顺序或自定义比较器进行排序。 3. **Map**: 存储键值对,如HashMap和TreeMap。HashMap使用哈希表实现,不保证键值对的顺序;而TreeMap基于红黑树,能按键的自然顺序或自定义比较器进行排序。 接...

    java的Map集合中按value值进行排序输出的实例代码

    然而,Map集合本身并不支持按照值(value)进行排序。要实现按value值排序,我们需要借助额外的工具类和方法。在本例中,我们将详细探讨如何在Java中对Map集合按value值进行排序,并给出一个具体的实例代码。 首先...

    Java Map 按值排序

    然而,在某些场景下,我们可能需要将Map中的元素按照值(value)进行排序。本文将详细介绍如何在Java中实现Map按值排序的几种方法。 1. 使用TreeMap TreeMap是Java中实现Map接口的一个类,它内部使用红黑树数据结构...

    Android 对Map按key和value分别排序的实例

    然后,我们使用`Collections.sort()`方法,传入一个自定义的Comparator,使得value按照升序排序。最后,遍历排序后的List并打印出键值对。 总的来说,对Android中的Map进行key排序可以使用TreeMap配合自定义...

    map实现按value升序排序

    本文将详细介绍如何实现`Map`按照值(value)升序排序以及按照键(key)排序。 首先,我们需要了解`Map`的基本概念。`Map`接口是Java集合框架的一部分,它定义了键值对的存储和访问方法。常见的`Map`实现有`HashMap...

    java8 stream 操作map根据key或者value排序的实现

    public , V extends Comparable&lt;? super V&gt;&gt; Map, V&gt; sortByValue(Map, V&gt; map) { Map, V&gt; result = new LinkedHashMap(); map.entrySet().stream() .sorted(Map.Entry., V&gt;comparingByValue().reversed()) ....

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

    本文主要关注如何对Java Map中的键(key)和值(value)进行排序。 1. **Key排序**: - **TreeMap** 是一个基于红黑树数据结构的Map实现,它能自动按key的自然顺序或自定义的Comparator进行排序。默认情况下,...

    java map 集合 排序

    2. 对于值排序: ```java Collections.sort(list, new Comparator, Integer&gt;&gt;() { @Override public int compare(Map.Entry, Integer&gt; o1, Map.Entry, Integer&gt; o2) { return o1.getValue().compareTo(o2....

    Map排序

    HashMap本身不支持排序,但如果需要排序,可以先将HashMap转换为List(例如List, V&gt;&gt;),然后使用Collections.sort()方法对List进行排序。排序的关键在于提供一个自定义的Comparator来决定比较规则。 ```java Map, ...

    使用HashMap实现成绩添加,输入次数,名字,可以算出总成绩,平均成绩,还有名次等

    在这个场景中,我们将HashMap用于存储学生的名字作为键(key)和他们的成绩作为值(value),而LinkedList则用于维护成绩的顺序,从而实现计算总成绩、平均成绩以及名次的功能。 首先,我们需要创建一个HashMap实例...

    单词计数和排序程序

    程序采用Java语言编写,利用了`HashMap`来存储每个字母及其对应的出现次数,以及`ArrayList`和自定义的`Comparator`实现对统计结果的排序。 #### 二、程序结构与功能详解 1. **包声明与导入语句** ```java ...

    Java中对list map根据map某个key值进行排序的方法

    Java中对List根据Map某个key值进行排序的方法 ...使用 Java 中的 Collections.sort() 方法和 Comparator 接口可以轻松地对 List 集合进行排序,包括根据 Map 中的某个 key 值对 List 集合进行排序。

    DictionarySort:实现排序和搜索方法

    1. **基于键的排序**:如果字典是HashMap,由于HashMap不保持任何特定的顺序,我们可以将其转换为TreeMap,因为TreeMap按照键的自然顺序(或自定义比较器)进行排序。对于自定义类作为键,需要实现Comparable接口或...

    java如何对map进行排序详解(map集合的使用)

    3. 其他Map的排序:对于HashMap和Hashtable这类无内置排序功能的Map,如果需要排序,可以将它们的entrySet()转换为List,然后使用Collections.sort()进行排序。同样,这会创建新的数据结构,而非原地排序。 三、...

    Java集合排序及java集合类详解

    6. **LinkedHashMap**:有序的HashMap,保留插入顺序或者按照访问顺序排序,适用于需要保持插入顺序或访问顺序的场景。 7. **Stack**:作为List接口的一个子类,实现了后进先出(LIFO)的栈数据结构。 8. **Queue*...

Global site tag (gtag.js) - Google Analytics