今天做的时候用到了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());
}
}
}
分享到:
相关推荐
3. 手动排序:你可以遍历HashMap,获取所有的value,然后使用Collections.sort()方法,传入自定义的Comparator对值进行排序。排序后,可以将结果存储到一个新的数据结构中,如ArrayListMultimap(Guava库提供)或者...
当我们需要按照Value(值)对Map进行排序时,通常会采用特定的方法。以下是关于Java Map按照Value排序的实现方法的详细说明: 1. **HashMap**: - HashMap是基于哈希表实现的,它不保证元素的顺序,插入顺序和遍历...
在某些场景下,我们可能需要对HashMap进行排序,例如按照key的值或key的自然顺序进行排序。本文将详细介绍如何对HashMap进行排序以及相关的知识点。 **1. HashMap的特点** HashMap的核心特点是其内部通过哈希函数来...
然而,标准的Map实现如HashMap、TreeMap等,并不支持按值排序。如果你需要一个按值排序的Map,需要采取一些额外的策略。这里我们将探讨如何在Java中实现按值排序的Map,特别关注“按值排序”这一需求。 首先,标准...
以下代码展示了如何使用 Collections 的 sort 方法实现 Map 按 value 排序: ```java List, String>> list = new ArrayList(map.entrySet()); Collections.sort(list, new Comparator, String>>() { public int ...
默认按照元素的自然顺序或自定义比较器进行排序。 3. **Map**: 存储键值对,如HashMap和TreeMap。HashMap使用哈希表实现,不保证键值对的顺序;而TreeMap基于红黑树,能按键的自然顺序或自定义比较器进行排序。 接...
然而,Map集合本身并不支持按照值(value)进行排序。要实现按value值排序,我们需要借助额外的工具类和方法。在本例中,我们将详细探讨如何在Java中对Map集合按value值进行排序,并给出一个具体的实例代码。 首先...
然而,在某些场景下,我们可能需要将Map中的元素按照值(value)进行排序。本文将详细介绍如何在Java中实现Map按值排序的几种方法。 1. 使用TreeMap TreeMap是Java中实现Map接口的一个类,它内部使用红黑树数据结构...
然后,我们使用`Collections.sort()`方法,传入一个自定义的Comparator,使得value按照升序排序。最后,遍历排序后的List并打印出键值对。 总的来说,对Android中的Map进行key排序可以使用TreeMap配合自定义...
本文将详细介绍如何实现`Map`按照值(value)升序排序以及按照键(key)排序。 首先,我们需要了解`Map`的基本概念。`Map`接口是Java集合框架的一部分,它定义了键值对的存储和访问方法。常见的`Map`实现有`HashMap...
public , V extends Comparable<? super V>> Map, V> sortByValue(Map, V> map) { Map, V> result = new LinkedHashMap(); map.entrySet().stream() .sorted(Map.Entry., V>comparingByValue().reversed()) ....
本文主要关注如何对Java Map中的键(key)和值(value)进行排序。 1. **Key排序**: - **TreeMap** 是一个基于红黑树数据结构的Map实现,它能自动按key的自然顺序或自定义的Comparator进行排序。默认情况下,...
2. 对于值排序: ```java Collections.sort(list, new Comparator, Integer>>() { @Override public int compare(Map.Entry, Integer> o1, Map.Entry, Integer> o2) { return o1.getValue().compareTo(o2....
HashMap本身不支持排序,但如果需要排序,可以先将HashMap转换为List(例如List, V>>),然后使用Collections.sort()方法对List进行排序。排序的关键在于提供一个自定义的Comparator来决定比较规则。 ```java Map, ...
在这个场景中,我们将HashMap用于存储学生的名字作为键(key)和他们的成绩作为值(value),而LinkedList则用于维护成绩的顺序,从而实现计算总成绩、平均成绩以及名次的功能。 首先,我们需要创建一个HashMap实例...
程序采用Java语言编写,利用了`HashMap`来存储每个字母及其对应的出现次数,以及`ArrayList`和自定义的`Comparator`实现对统计结果的排序。 #### 二、程序结构与功能详解 1. **包声明与导入语句** ```java ...
Java中对List根据Map某个key值进行排序的方法 ...使用 Java 中的 Collections.sort() 方法和 Comparator 接口可以轻松地对 List 集合进行排序,包括根据 Map 中的某个 key 值对 List 集合进行排序。
1. **基于键的排序**:如果字典是HashMap,由于HashMap不保持任何特定的顺序,我们可以将其转换为TreeMap,因为TreeMap按照键的自然顺序(或自定义比较器)进行排序。对于自定义类作为键,需要实现Comparable接口或...
3. 其他Map的排序:对于HashMap和Hashtable这类无内置排序功能的Map,如果需要排序,可以将它们的entrySet()转换为List,然后使用Collections.sort()进行排序。同样,这会创建新的数据结构,而非原地排序。 三、...
6. **LinkedHashMap**:有序的HashMap,保留插入顺序或者按照访问顺序排序,适用于需要保持插入顺序或访问顺序的场景。 7. **Stack**:作为List接口的一个子类,实现了后进先出(LIFO)的栈数据结构。 8. **Queue*...