`

java map的重复键值的排序

    博客分类:
  • java
阅读更多

1. 概述

    在java map中,一般有重复的key是使用IdentityHashMap存储,可以自动按键进行排序的是TreeMap,但是TreeMap不能使用重复的键,并且不能按照值进行排序,这就需要我们自己定义排序规则进行处理,下面记一下我做的重复键值排序,留个备份

 

2. 代码

package com.taobao.tpif.common;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.IdentityHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import com.taobao.tpif.common.KeyValueComparator.Order;
import com.taobao.tpif.common.KeyValueComparator.Type;

public class MapSorter {

	public static void main(String[] args) {
		IdentityHashMap<Double, String> map = new IdentityHashMap<Double, String>();
		map.put(10.1, "aaaa");
		map.put(10.1, "bbbb");
		map.put(10.1, "cccc");
		map.put(10.08, "dddd");
		map.put(10.02, "eeee");
		map.put(10.08, "aaaa");

		System.out.println("----------[ [ [ 排序前  ] ] ]----------\n");

		for (Entry<Double, String> entry : map.entrySet()) {
			System.out.println("\t" + entry.getKey() + "\t\t" + entry.getValue());
		}

		System.out.println("\n----------[ [ [ 按键降序 ] ] ]----------\n");

		List<Map.Entry<Double, String>> list1 = new ArrayList<Map.Entry<Double, String>>(map.entrySet());
		Collections.sort(list1, new KeyValueComparator(Type.KEY, Order.DESC));

		for (Entry<Double, String> entry : list1) {
			System.out.println("\t" + entry.getKey() + "\t\t" + entry.getValue());
		}
		
		System.out.println("\n----------[ [ [ 按值升序  ] ] ]----------\n");
		
		List<Map.Entry<Double, String>> list2 = new ArrayList<Map.Entry<Double, String>>(map.entrySet());
		Collections.sort(list2, new KeyValueComparator(Type.VALUE, Order.ASC));

		for (Entry<Double, String> entry : list2) {
			System.out.println("\t" + entry.getKey() + "\t\t" + entry.getValue());
		}

		System.out.println("\n----------[ [ [ 结束啦 ] ] ]----------\n");
	}
}

class KeyValueComparator implements Comparator<Map.Entry<Double, String>> {
	enum Type {
		KEY, VALUE;
	}

	enum Order {
		ASC, DESC
	}

	private Type type;
	private Order order;

	public KeyValueComparator(Type type, Order order) {
		this.type = type;
		this.order = order;
	}

	@Override
	public int compare(Entry<Double, String> o1, Entry<Double, String> o2) {
		switch (type) {
		case KEY:
			switch (order) {
			case ASC:
				return o1.getKey().compareTo(o2.getKey());
			case DESC:
				return o2.getKey().compareTo(o1.getKey());
			default:
				throw new RuntimeException("顺序参数错误");
			}
		case VALUE:
			switch (order) {
			case ASC:
				return o1.getValue().compareTo(o2.getValue());
			case DESC:
				return o2.getValue().compareTo(o1.getValue());
			default:
				throw new RuntimeException("顺序参数错误");
			}
		default:
			throw new RuntimeException("类型参数错误");
		}
	}

}

 

3. 输出

----------[ [ [ 排序前  ] ] ]------------

	10.08		aaaa
	10.1		cccc
	10.08		dddd
	10.1		aaaa
	10.02		eeee
	10.1		bbbb

----------[ [ [ 按键降序 ] ] ]----------

	10.1		cccc
	10.1		aaaa
	10.1		bbbb
	10.08		aaaa
	10.08		dddd
	10.02		eeee

----------[ [ [ 按值升序  ] ] ]----------

	10.08		aaaa
	10.1		aaaa
	10.1		bbbb
	10.1		cccc
	10.08		dddd
	10.02		eeee

----------[ [ [ 结束啦 ] ] ]------------

 

 

0
6
分享到:
评论

相关推荐

    Java Map按键排序和按值排序

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

    java实现的map排序

    Java中实现Map排序的方式主要有两种,一种是使用TreeMap,另一种是使用SortedMap接口。HashMap内部元素是无序的,它不会记录插入顺序,也不保证顺序。如果需要有序的Map,可以使用TreeMap,它会根据键的自然顺序进行...

    Java Map 按值排序

    在Java编程语言中,Map接口提供了键值对的存储方式,但默认情况下,Map并不会按照特定的顺序来存储或返回元素。然而,在某些场景下,我们可能需要将Map中的元素按照值(value)进行排序。本文将详细介绍如何在Java中...

    Java 对象属性map排序示例

    在Java编程中,Map接口是数据结构之一,用于存储键值对。然而,Map本身并不保证元素的顺序,特别是插入顺序或自然排序。当我们需要按照特定顺序遍历Map中的元素时,就需要对Map进行排序。本示例将详细介绍如何对Java...

    java map实例,排序

    在Java编程语言中,Map接口是集合框架的重要组成部分,它提供了键值对的存储功能。在Java中,Map有多种实现类,每种实现类有不同的特性和用途。本篇文章将详细探讨`HashMap`, `LinkedHashMap`, `TreeMap`, 和 `...

    java map 集合 排序

    在Java编程语言中,Map集合是一个非常重要的数据结构,它存储键值对,其中每个键都是唯一的。然而,Map默认不保证元素的顺序,如果需要按照特定规则进行排序,我们需要用到特定类型的Map或者手动排序。本文将深入...

    对于java map类排序

    在Java编程语言中,`Map`接口是用于存储键值对的数据结构,它不保证元素的顺序。然而,有时候我们可能需要对Map按照键(key)或者值(value)进行排序。这里,我们讨论的是“对于Java Map类排序”,特别是通过键进行...

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

    在Java编程中,Map接口是用于存储键值对的数据结构,常见的实现类包括HashMap、TreeMap、Hashtable和LinkedHashMap等。这些实现类各有特点,但默认并不保证元素的顺序。当我们需要按照Value(值)对Map进行排序时,...

    如何利用Java8 Stream API对Map按键或值排序

    Java 8 Stream API 的引入为处理集合数据提供了更高效、更简洁的方式,其中包括对Map的排序功能。在本文中,我们将深入探讨如何使用Stream API来按键或值对Map进行排序,以及涉及的一些关键函数和概念。 一、Java 8...

    java中Map集合的排序方法

    Map中元素存放是无序的 HashMap注意事项: 1,HashMap底层维护一个数组,我们向HashMap中所放置的对象实际上是存储在该数组当中; 2,当向HashMap中put一对键值时,它会根据key的hashCode值计算出一个位置,该位置...

    对Map的key和value进行排序

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

    对Map按key和value分别排序

    Map 是键值对的集合接口,它的实现类主要包括 HashMap、TreeMap、Hashtable 及 LinkedHashMap 等。其中,TreeMap 是基于红黑树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的自然顺序进行排序,或者根据...

    JavaMap.rar_arraylist map_collection_java map_javamap_地图 java

    在Java中,"javamap"和"地图_java"可能是指使用Map类来模拟现实世界中的地理地图,例如通过键表示地理位置,值表示该地点的信息。这涉及到自定义类作为键值对中的元素类型,以及如何设计键值对以适应特定需求的问题...

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

    在Java编程中,Map接口表示一组键值对的集合,其中每个键都是唯一的。然而,标准的Map实现如HashMap、TreeMap等,并不支持按值排序。如果你需要一个按值排序的Map,需要采取一些额外的策略。这里我们将探讨如何在...

    Java Map 集合类简介

    【Java Map 集合类简介】 在Java的`java.util`包中,集合类扮演着重要的角色,其中List和Map是最为常见的两种。List的实现例如ArrayList和Vector,它们都是可变大小的列表,适合存储和操作各种类型对象的序列。特别...

    java Map 遍历方法

    在Java编程语言中,`Map`接口是集合框架中的一个核心组成部分,它存储键值对映射。本篇文章将详细介绍几种常用的遍历`Map`的方法,包括使用传统迭代器(Iterator)、增强型for循环(For-Each循环)以及通过键集(Key...

    Java中实现参数名ASCII码从小到大排序(字典序).doc

    这里提供了一个名为`createSign`的方法,它接受一个`Map, Object&gt;`类型的参数,并返回一个字符串,其中包含排序后的键值对。下面是对这个方法的详细解释和扩展知识。 1. **`TreeMap`的使用**: `TreeMap`是Java...

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

    在Java编程中,Map接口表示一组键值对的集合,其中每个键都是唯一的。常见的Map实现包括HashMap、TreeMap、Hashtable和LinkedHashMap等。本文主要关注如何对Java Map中的键(key)和值(value)进行排序。 1. **Key...

    java8-如何使用Stream API对Map类型元素排序.pdf

    总结,Java 8 Stream API提供了强大的工具来处理Map类型的数据,包括按键或值进行排序以及处理键值冲突。通过学习和熟练应用这些技术,可以提高代码的可读性和效率。在实际开发中,结合Lambda表达式和其他Stream操作...

    java中map的使用实例

    在Java编程语言中,Map接口是集合框架的重要组成部分,它提供了键值对(key-value pairs)的存储方式。Map不是列表或数组,而是允许我们通过一个键(key)来查找对应的值(value)。本篇文章将深入讲解Map的使用实例...

Global site tag (gtag.js) - Google Analytics