`

Map排序(按key/按value)

 
阅读更多

package com.abc.test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.Map.Entry;

/**
 * 可能会遇到这样的情况,我可能要对Map<key,value>的集合进行排序,而这种排序又分为两种情况,你可能按key值排序;
 * 另外你也可能会遇到按value值进行排序的情况。
 * 大家都知道,默认的情况下,TreeMap:是按key升序,进行排序的;LinkedHashMap:是按加入顺序进行排序的
 * ;HashMap:内部数值的顺序并不是以存放的先后顺序为主
 * ,而是以hash值的顺序为主,其次才是存放的先后顺序。在这里我们只讨论如何实现HashMap的排序。
 * 
 */
@SuppressWarnings("unchecked")
public class MapSortTest {

	public static void main(String[] args) {
		//初始化map
		Map<String, Integer> map=getMapInstance();
		printMap(map);
		
		//选择操作
		Scanner input=new Scanner(System.in);
		int num=input.nextInt();
		switch (num) {
			case 0:
				System.exit(0);
				break;
			case 1:
				Map<String, Integer> sortMaps = sortMapByKey(map);
				printMap(sortMaps);
				break;
			case 2:
				sortMapByValue(map);
				break;
			case 3:
				mapSortByKey(map);
				break;
			case 4:
				mapSortByValue(map);
				break;
			default:
				System.out.println("error input!");
				break;
		}
		
	}

	public static Map sortMapByKey(Map map) {
		Map<Object, Object> mapVK = new TreeMap<Object, Object>(
				new Comparator<Object>() {
					public int compare(Object obj1, Object obj2) {
						String v1 = (String) obj1;
						String v2 = (String) obj2;
						int s = v2.compareTo(v1);
						return s;
					}
				});
		Set col = map.keySet();
		Iterator iter = col.iterator();
		while (iter.hasNext()) {
			String key = (String) iter.next();
			Integer value = (Integer) map.get(key);
			mapVK.put(key, value);
		}
		return mapVK;
	}

	public static void sortMapByValue(Map maps) {
		List<Map.Entry<String, Integer>> info = new ArrayList<Map.Entry<String, Integer>>(maps.entrySet());
		Collections.sort(info, new Comparator<Map.Entry<String, Integer>>() {
			public int compare(Map.Entry<String, Integer> obj1,Map.Entry<String, Integer> obj2) {
				return obj2.getValue() - obj1.getValue();
			}
		});
		for (int j = 0; j < info.size(); j++) {
			System.out.println(info.get(j).getKey() + "------->"+ info.get(j).getValue());
		}
	}

	// ====================================================================================
	private static SortedMap<String, Integer> mapSortByKey(Map<String, Integer> unsort_map) {
		TreeMap<String, Integer> result = new TreeMap<String, Integer>();
		Object[] unsort_key = unsort_map.keySet().toArray();
		Arrays.sort(unsort_key);
		for (int i = 0; i < unsort_key.length; i++) {
			result.put(unsort_key[i].toString(), unsort_map.get(unsort_key[i]));
		}
		return result.tailMap(result.firstKey());
	}
	
	public static void mapSortByValue(Map map) {
		List arrayList = new ArrayList(map.entrySet());
		Collections.sort(arrayList,new Comparator(){
			@Override
			public int compare(Object o1, Object o2) {
				Map.Entry obj1 = (Map.Entry)o1;
				Map.Entry obj2 = (Map.Entry)o2;			
				return obj1.getValue().toString().compareTo(obj2.getValue().toString());
			}
		});
		for(Iterator it = arrayList.iterator();it.hasNext();){
			Map.Entry entry = (Map.Entry)it.next();
			System.out.println(entry.getKey()+":"+entry.getValue());
		}
	}
	public static void abc(Map map){
		TreeMap treemap = new TreeMap(map);
	}
	public static void abcd() {
		Map<String, Integer> keyfreqs = new HashMap<String, Integer>();
		ArrayList<Entry<String, Integer>> list = new ArrayList<Entry<String, Integer>>(keyfreqs.entrySet());
		Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
			public int compare(Map.Entry<String, Integer> o1,Map.Entry<String, Integer> o2) {
				return (o2.getValue() - o1.getValue());
			}
		});
		for (Entry<String, Integer> e : list) {
			System.out.println(e.getKey() + "::::" + e.getValue());
		}
	}
	public static Map getMapInstance(){
		Map<String, Integer> map = new HashMap<String, Integer>();
		map.put("apple",40);
		map.put("boy",30);
		map.put("cat",20);
		map.put("dog",10);
		return map;
	}
	public static void printMap(Map map){
		Iterator i = map.entrySet().iterator();
		while (i.hasNext()) {
			Map.Entry<String, Integer> entry = (Map.Entry<String, Integer>) i.next();
			System.out.println(entry.getKey() + ":"+ entry.getValue());
		}
		System.out.println("========================================================");
	}
}
 
分享到:
评论

相关推荐

    对Map的key和value进行排序

    对Map的key和value进行排序 对Map的key和value进行排序是Java编程中非常重要的一部分。Map是Java集合框架中的一种数据结构,用于存储键值对。然而,在实际应用中,我们经常需要对Map中的key或value进行排序,以满足...

    对Map按key和value分别排序

    "对 Map 按 key 和 value 分别排序" 摘要:本文主要介绍了 Map 按 key 和 value 分别排序的方法,包括使用 TreeMap 的 key 排序和 value 排序两种方式。 Map 按 key 排序 Map 是键值对的集合接口,它的实现类主要...

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

    当需要对Map中的数据进行排序时,通常有两种情况:按key排序和按value排序。本文将详细介绍如何在Android环境下对Map进行这两种排序。 首先,我们来讨论按key排序。TreeMap是一个基于红黑树实现的Map,它可以根据...

    Java Map按键排序和按值排序

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

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

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

    对map里面的value进行排序

    而“工具”标签可能意味着博主还介绍了某些可以帮助处理Map排序的第三方库或实用工具。 在1.txt文件中,如果包含的是上述知识点的示例代码或进一步的解释,读者可以通过阅读文件内容来加深理解。总的来说,理解和...

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

    Java8 Stream 操作 Map 根据 Key 或 Value 排序的实现 Java8 中的 Stream 操作为开发者提供了简洁高效的数据处理方式,今天我们将介绍如何使用 Java8 Stream 操作 Map 根据 Key 或 Value 排序的实现。 Map 根据 ...

    Java Map 按值排序

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

    java中对单层json进行key字母排序

    在提供的代码中,可以看到一个名为`getSortJson`的方法,它接受一个JSONObject作为参数,并返回一个新的按key排序后的JSONObject。这个方法的具体步骤如下: 1. 使用`Iterator&lt;String&gt; iteratorKeys = json.keys();...

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

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

    Hashmap 通过对VALUE排序 源代码

    HashMap是Java编程语言中最常用的集合类之一,它提供了一种基于键值对(key-value pair)的数据存储方式,允许我们通过键快速查找对应的值。在Java的HashMap中,元素是无序的,也就是说,它们在内存中的存储位置并...

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

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

    Go-go有序map用于json输出有序key的对象和后端有序循环map取值

    - 有序map在后端处理时,可以方便地进行有序遍历,例如在循环中按顺序访问key。这在处理一些需要按照特定顺序执行的操作时非常有用,比如迭代处理数据、渲染模板等。 ```go for _, key := range om.Order() { // ...

    java中set、list和map的使用方法实例

    // java中对象容器主要有Set,List和Map三个接口类。 // 迭代器(Iterator)模式,又叫做游标(Cursor)...// TreeMap按自己的意愿进行排序,默认按key值升序排序。 另包含一篇网文:在java中使用TreeMap进行中文排序

    Java Map 按Key排序实例代码

    本篇文章将深入讲解如何在Java中实现Map按Key排序,并通过一个具体的实例代码进行演示。 首先,我们要了解Java中支持按Key排序的Map实现类:TreeMap。TreeMap内部基于红黑树数据结构,能够保证Map的Key按照自然顺序...

    map实现按value升序排序

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

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

    Java中对List&lt;Map&gt;根据Map某个key值进行排序的方法 在 Java 中,排序是一个非常常见的操作,特别是在处理 List 集合时。当我们需要根据 Map 中的某个 key 值对 List 集合进行排序时,需要使用Comparator接口来实现...

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

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

    List<Map>中英文排序

    支持一个List&lt;Map&gt;按照MAP中的一个或者多个Key的value值的中英文来排序,自动识别字符和数字(包括[a-zA-z]?[0-9]*)排序

Global site tag (gtag.js) - Google Analytics