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 ----------[ [ [ 结束啦 ] ] ]------------
相关推荐
Java Map按键排序和按值排序 Java Map按键排序和按值排序是Java编程语言中常用的数据结构之一。Map是一种键值对的集合,它可以按照键或值进行排序。下面,我们将详细地介绍Java Map的按键排序和按值排序。 按键...
Java中实现Map排序的方式主要有两种,一种是使用TreeMap,另一种是使用SortedMap接口。HashMap内部元素是无序的,它不会记录插入顺序,也不保证顺序。如果需要有序的Map,可以使用TreeMap,它会根据键的自然顺序进行...
在Java编程语言中,Map接口提供了键值对的存储方式,但默认情况下,Map并不会按照特定的顺序来存储或返回元素。然而,在某些场景下,我们可能需要将Map中的元素按照值(value)进行排序。本文将详细介绍如何在Java中...
在Java编程中,Map接口是数据结构之一,用于存储键值对。然而,Map本身并不保证元素的顺序,特别是插入顺序或自然排序。当我们需要按照特定顺序遍历Map中的元素时,就需要对Map进行排序。本示例将详细介绍如何对Java...
在Java编程语言中,Map接口是集合框架的重要组成部分,它提供了键值对的存储功能。在Java中,Map有多种实现类,每种实现类有不同的特性和用途。本篇文章将详细探讨`HashMap`, `LinkedHashMap`, `TreeMap`, 和 `...
在Java编程语言中,Map集合是一个非常重要的数据结构,它存储键值对,其中每个键都是唯一的。然而,Map默认不保证元素的顺序,如果需要按照特定规则进行排序,我们需要用到特定类型的Map或者手动排序。本文将深入...
在Java编程语言中,`Map`接口是用于存储键值对的数据结构,它不保证元素的顺序。然而,有时候我们可能需要对Map按照键(key)或者值(value)进行排序。这里,我们讨论的是“对于Java Map类排序”,特别是通过键进行...
在Java编程中,Map接口是用于存储键值对的数据结构,常见的实现类包括HashMap、TreeMap、Hashtable和LinkedHashMap等。这些实现类各有特点,但默认并不保证元素的顺序。当我们需要按照Value(值)对Map进行排序时,...
Java 8 Stream API 的引入为处理集合数据提供了更高效、更简洁的方式,其中包括对Map的排序功能。在本文中,我们将深入探讨如何使用Stream API来按键或值对Map进行排序,以及涉及的一些关键函数和概念。 一、Java 8...
Map中元素存放是无序的 HashMap注意事项: 1,HashMap底层维护一个数组,我们向HashMap中所放置的对象实际上是存储在该数组当中; 2,当向HashMap中put一对键值时,它会根据key的hashCode值计算出一个位置,该位置...
对Map的key和value进行排序是Java编程中非常重要的一部分。Map是Java集合框架中的一种数据结构,用于存储键值对。然而,在实际应用中,我们经常需要对Map中的key或value进行排序,以满足特定的业务需求。 对Map中的...
Map 是键值对的集合接口,它的实现类主要包括 HashMap、TreeMap、Hashtable 及 LinkedHashMap 等。其中,TreeMap 是基于红黑树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的自然顺序进行排序,或者根据...
在Java中,"javamap"和"地图_java"可能是指使用Map类来模拟现实世界中的地理地图,例如通过键表示地理位置,值表示该地点的信息。这涉及到自定义类作为键值对中的元素类型,以及如何设计键值对以适应特定需求的问题...
在Java编程中,Map接口表示一组键值对的集合,其中每个键都是唯一的。然而,标准的Map实现如HashMap、TreeMap等,并不支持按值排序。如果你需要一个按值排序的Map,需要采取一些额外的策略。这里我们将探讨如何在...
【Java Map 集合类简介】 在Java的`java.util`包中,集合类扮演着重要的角色,其中List和Map是最为常见的两种。List的实现例如ArrayList和Vector,它们都是可变大小的列表,适合存储和操作各种类型对象的序列。特别...
在Java编程语言中,`Map`接口是集合框架中的一个核心组成部分,它存储键值对映射。本篇文章将详细介绍几种常用的遍历`Map`的方法,包括使用传统迭代器(Iterator)、增强型for循环(For-Each循环)以及通过键集(Key...
这里提供了一个名为`createSign`的方法,它接受一个`Map, Object>`类型的参数,并返回一个字符串,其中包含排序后的键值对。下面是对这个方法的详细解释和扩展知识。 1. **`TreeMap`的使用**: `TreeMap`是Java...
在Java编程中,Map接口表示一组键值对的集合,其中每个键都是唯一的。常见的Map实现包括HashMap、TreeMap、Hashtable和LinkedHashMap等。本文主要关注如何对Java Map中的键(key)和值(value)进行排序。 1. **Key...
总结,Java 8 Stream API提供了强大的工具来处理Map类型的数据,包括按键或值进行排序以及处理键值冲突。通过学习和熟练应用这些技术,可以提高代码的可读性和效率。在实际开发中,结合Lambda表达式和其他Stream操作...
在Java编程语言中,Map接口是集合框架的重要组成部分,它提供了键值对(key-value pairs)的存储方式。Map不是列表或数组,而是允许我们通过一个键(key)来查找对应的值(value)。本篇文章将深入讲解Map的使用实例...