`
liuhd2010
  • 浏览: 147875 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

Java Map按键(Key)排序和按值(Value)排序

 
阅读更多

Map排序的方式有很多种,两种比较常用的方式:按键排序(sort by key), 按值排序(sort by value)。
1、按键排序
jdk内置的java.util包下的TreeMap<K,V>既可满足此类需求,向其构造方法 TreeMap(Comparator<? super K> comparator)  传入我们自定义的比较器即可实现按键排序。

 

public class MapSortDemo {
	public static void main(String[] args) {
		Map<String, String> map = new TreeMap<String, String>();
		map.put("KFC", "kfc");
		map.put("WNBA", "wnba");
		map.put("NBA", "nba");
		map.put("CBA", "cba");
		Map<String, String> resultMap = sortMapByKey(map);	//按Key进行排序
		for (Map.Entry<String, String> entry : resultMap.entrySet()) {
			System.out.println(entry.getKey() + " " + entry.getValue());
		}
	}
	
	/**
	 * 使用 Map按key进行排序
	 * @param map
	 * @return
	 */
	public static Map<String, String> sortMapByKey(Map<String, String> map) {
		if (map == null || map.isEmpty()) {
			return null;
		}
		Map<String, String> sortMap = new TreeMap<String, String>(new MapKeyComparator());
		sortMap.putAll(map);
		return sortMap;
	}
}

//比较器类
public class MapKeyComparator implements Comparator<String>{
	public int compare(String str1, String str2) {
		return str1.compareTo(str2);
	}
}

 2、按值排序
按值排序就相对麻烦些了,貌似没有直接可用的数据结构能处理类似需求,需要我们自己转换一下。
Map本身按值排序是很有意义的,很多场合下都会遇到类似需求,可以认为其值是定义的某种规则或者权重。

 

原理:将待排序Map中的所有元素置于一个列表中,接着使用Collections的一个静态方法 sort(List<T> list, Comparator<? super T> c)
来排序列表,同样是用比较器定义比较规则。排序后的列表中的元素再依次装入Map,为了肯定的保证Map中元素与排序后的List中的元素的顺序一致,使用了LinkedHashMap数据类型。

实现代码

public class MapSortDemo {
	public static void main(String[] args) {
		Map<String, String> map = new TreeMap<String, String>();
		map.put("KFC", "kfc");
		map.put("WNBA", "wnba");
		map.put("NBA", "nba");
		map.put("CBA", "cba");
		Map<String, String> resultMap = sortMapByValue(map); //按Value进行排序
		for (Map.Entry<String, String> entry : resultMap.entrySet()) {
			System.out.println(entry.getKey() + " " + entry.getValue());
		}
	}
	
	/**
	 * 使用 Map按value进行排序
	 * @param map
	 * @return
	 */
	public static Map<String, String> sortMapByValue(Map<String, String> map) {
		if (map == null || map.isEmpty()) {
			return null;
		}
		Map<String, String> sortedMap = new LinkedHashMap<String, String>();
		List<Map.Entry<String, String>> entryList = new ArrayList<Map.Entry<String, String>>(map.entrySet());
		Collections.sort(entryList, new MapValueComparator());
		Iterator<Map.Entry<String, String>> iter = entryList.iterator();
		Map.Entry<String, String> tmpEntry = null;
		while (iter.hasNext()) {
			tmpEntry = iter.next();
			sortedMap.put(tmpEntry.getKey(), tmpEntry.getValue());
		}
		return sortedMap;
	}
}

//比较器类
public class MapValueComparator implements Comparator<Map.Entry<String, String>> {
	public int compare(Entry<String, String> me1, Entry<String, String> me2) {
		return me1.getValue().compareTo(me2.getValue());
	}
}

 

 

分享到:
评论
1 楼 小旋风vs 2015-07-20  
写的不错,赞

相关推荐

    Java Map按键排序和按值排序

    Java Map按键排序和按值排序 Java Map按键排序和按值排序是Java编程语言中常用的数据结构之一。Map是一种键值对的集合,它可以按照键或值进行排序。下面,我们将详细地介绍Java Map的按键排序和按值排序。 按键...

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

    这里我们将探讨如何在Java中实现按值排序的Map,特别关注“按值排序”这一需求。 首先,标准的SortedMap接口是根据键(key)进行排序的,例如TreeMap就是一种按键升序排序的实现。因此,如果想按值排序,我们需要...

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

    标题中提到的“JCF(List、Set、Map)学习,实现了&lt;key,value&gt;按value排序”是一个关键点,我们将深入探讨这个话题。 首先,让我们了解List、Set和Map的区别。List是有序的集合,允许重复元素,并且可以保持插入顺序...

    对于java map类排序

    然而,有时候我们可能需要对Map按照键(key)或者值(value)进行排序。这里,我们讨论的是“对于Java Map类排序”,特别是通过键进行排序。 在给定的代码中,有一个名为`mapSortByKey`的方法,该方法接收一个未...

    map实现按value升序排序

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

    Java Map的排序实例详解

    Java Map是一种常用的数据结构,它可以将键(key)映射到值(value)上。然而,在某些情况下,我们需要对Map中的键值对进行排序,以满足特定的业务需求。例如,在排行榜应用中,我们需要对成绩进行排序,以显示前几...

    Map排序

    Map接口在Java中是一种非常重要的数据结构,它存储键值对(key-value pairs),其中键是唯一的。默认情况下,Map并不保证其元素的顺序,但有些场景下我们需要按照特定的规则对Map进行排序,比如按照键的自然顺序或...

    Java集合排序及java集合类详解(Collection、List、Map、Set

    本文将深入探讨Java集合框架的四大核心组件:`Collection`、`List`、`Map`和`Set`,以及它们的排序方法。 ### 1. 集合框架概述 #### 1.1.1 容器简介 在Java中,容器(Containers)是用来存储和管理对象的结构。...

    Java_Collection_List-Set-Map.zip_list set map

    - Map的方法包括put(K key, V value)插入键值对,get(Object key)根据键获取值,remove(Object key)移除键对应的键值对等。 了解和熟练掌握List、Set和Map接口及其实现类,对于编写高效、可维护的Java代码至关重要...

    Map集合的继承关系图.pdf

    Map集合是一个非常重要的部分,它是以键值对(key-value pairs)的形式存储数据的接口。Map接口在java.util包中,并且提供了将键映射到值的对象。这些键不能重复,每个键最多映射到一个值。Map集合不是Collection的...

    【IT十八掌徐培成】Java基础第11天-01.Map集合.zip

    在Java编程语言中,Map接口是集合框架的重要组成部分,它提供了键值对(key-value pairs)的存储方式,使得我们可以通过键来查找对应的值。在本课程“【IT十八掌徐培成】Java基础第11天-01.Map集合”中,徐培成老师...

    Java集合框架详解

    Java集合框架是Java语言提供的用于存储数据和操作数据的集合类库。...总体来说,Java集合框架为开发者提供了丰富多样的数据结构来应对不同的数据存储需求,而Map接口的不同实现类则适应了各种场景下的性能和功能要求。

    Map实现类1

    - Map.Entry接口代表Map中的一个键值对,提供了getKey、getValue和setValue方法。 了解这些知识点有助于理解和使用Java中的Map,特别是在处理大量数据时选择适合的Map实现类,以及在遍历和操作Map时选择高效的方式...

    HadoopMapReduce-分区、排序、切片等.zip

    局部排序是按键(Key)进行的,而键值对的值(Value)则保持相对顺序。默认情况下,Hadoop 使用 WritableComparator 进行比较。 ```java public static class My.Comparator extends WritableComparator { public ...

    Java集合Collection、List、Set、Map使用详解

    - `containsValue(Object value)`:检查Map是否包含指定的值。 ##### 1.4.3 Comparable接口 为了使Map中的元素按照一定的顺序排列,可以使用实现了`Comparable`接口的键。这样,当向Map中添加元素时,Map会根据键...

    Map地图

    2. TreeMap:线程非同步,基于红黑树数据结构,按键的自然顺序或比较器排序,插入和查找操作的时间复杂度为O(logn)。 3. LinkedHashMap:线程非同步,保留插入顺序或访问顺序,继承自HashMap,同时提供有序性。 4. ...

Global site tag (gtag.js) - Google Analytics