Java Map 按Key排序实例代码

Java Map 按Key排序

有时候我们业务上需要对map里面的值按照key的大小来进行排序的时候我们就可以利用如下方法来进行排序了,

package test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

public  class  Demo  {

  private  HashMap<Integer, Object> map =new HashMap<Integer, Object>();
  private  Set<Integer> keySet = map.keySet();

  public  Object  get(Integer  key)  {
    return  map.get(key);
  }

  public  void  put(Integer  key,  Object  value)  {
    map.put(key,  value);
  }

  @SuppressWarnings("unchecked")
  public void sort()  {
    List<Integer> list =new ArrayList<Integer>(map.keySet());
    Collections.sort(list,  new  Comparator<Object>(){
      public int compare(Object a, Object b) {
         return a.toString().toLowerCase().compareTo(b.toString().toLowerCase());
      }
    });

    this.keySet  =  new  TreeSet<Integer>(list);
  }

  public  Set<Integer>  keySet()  {
    return  this.key
}

  public static void main(String [] args){
    Demo map= new Demo();
    map.put(11, "加");
    map.put(12, "关");
    map.put(13, "注");
    map.put(10, "添");
    map.put(1, "小");
    map.put(8, "记");
    map.put(9, "得");
    map.put(7, "客");
    map.put(5, "的");
    map.put(6, "博");
    map.put(4, "豆");
    map.put(3, "糖");
    map.put(2, "小");
    System.out.println("排序前");
    for (Iterator it =map.keySet().iterator();it.hasNext();){
      Integer key= (Integer)it.next();
      System.out.println( "key[ "  +  key  +  "],  value[ "  +  map.get(key)  +  "] ");
    }
     //
    System.out.println("排序后");
     System.out.println( "\n ");
     map.sort();
    for  (Iterator it=map.keySet().iterator();it.hasNext();)  {
      Integer key=(Integer)it.next();
      System.out.println( "key[ "  +  key  +  "],  value[ "  +  map.get(key)  +  "] ");
    }
  }
}

运行效果如下

排序前
key[ 1],  value[ 小]
key[ 2],  value[ 小]
key[ 3],  value[ 糖]
key[ 4],  value[ 豆]
key[ 5],  value[ 的]
key[ 6],  value[ 博]
key[ 7],  value[ 客]
key[ 8],  value[ 记]
key[ 9],  value[ 得]
key[ 10],  value[ 添]
key[ 11],  value[ 加]
key[ 12],  value[ 关]
key[ 13],  value[ 注]

排序后
key[ 1],  value[ 小]
key[ 2],  value[ 小]
key[ 3],  value[ 糖]
key[ 4],  value[ 豆]
key[ 5],  value[ 的]
key[ 6],  value[ 博]
key[ 7],  value[ 客]
key[ 8],  value[ 记]
key[ 9],  value[ 得]
key[ 10],  value[ 添]
key[ 11],  value[ 加]
key[ 12],  value[ 关]
key[ 13],  value[ 注]

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • java HashMap内部实现原理详解

    详解HashMap内部实现原理 内部数据结构 static class Entry<K,V> implements Map.Entry<K,V> { final K key; V value; Entry<K,V> next; int hash; 从上面的数据结构定义可以看出,HashMap存元素的是一组键值对的链表,以什么形式存储呢 transient Entry<K,V>[] table = (Entry<K,V>[]) EMPTY_TABL

  • java Map转Object与Object转Map实现代码

    java Map转Object与 Object转Map 1.定义一个实体类: package reflect; public class User { private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } publ

  • java 中HashMap实现原理深入理解

    1. HashMap的数据结构 数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端.       数组 数组存储区间是连续的,占用内存严重,故空间复杂的很大.但数组的二分查找时间复杂度小,为O(1):数组的特点是:寻址容易,插入和删除困难: 链表 链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N).链表的特点是:寻址困难,插入和删除容易. 哈希表 那么我们能不能综合两者的特性,做出一种寻址容易,插入删除也容易的数据结构?答案是肯定的,这就是我们要提

  • java HashMap扩容详解及实例代码

    HashMap扩容 前言: HashMap的size大于等于(容量*加载因子)的时候,会触发扩容的操作,这个是个代价不小的操作. 为什么要扩容呢?HashMap默认的容量是16,随着元素不断添加到HashMap里,出现hash冲突的机率就更高,那每个桶对应的链表就会更长, 这样会影响查询的性能,因为每次都需要遍历链表,比较对象是否相等,一直到找到元素为止. 为了提升查询性能,只能扩容,减少hash冲突,让元素的key尽量均匀的分布. 扩容基本点 加载因子默认值是0.75 static final

  • Java Base64位编码与String字符串的相互转换,Base64与Bitmap的相互转换实例代码

    首先是网上大神给的类 package com.duanlian.daimengmusic.utils; public final class Base64Util { private static final int BASELENGTH = 128; private static final int LOOKUPLENGTH = 64; private static final int TWENTYFOURBITGROUP = 24; private static final int EIGH

  • 详解Java中list,set,map的遍历与增强for循环

    详解Java中list,set,map的遍历与增强for循环 Java集合类可分为三大块,分别是从Collection接口延伸出的List.Set和以键值对形式作存储的Map类型集合. 关于增强for循环,需要注意的是,使用增强for循环无法访问数组下标值,对于集合的遍历其内部采用的也是Iterator的相关方法.如果只做简单遍历读取,增强for循环确实减轻不少的代码量. 集合概念: 1.作用:用于存放对象 2.相当于一个容器,里面包含着一组对象,其中的每个对象作为集合的一个元素出现 3.jav

  • Java Map简介_动力节点Java学院整理

    Map简介 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值.此接口取代 Dictionary 类,后者完全是一个抽象类,而不是一个接口. Map 接口提供三种collection 视图,允许以键集.值集或键-值映射关系集的形式查看某个映射的内容.映射顺序 定义为迭代器在映射的 collection 视图上返回其元素的顺序.某些映射实现可明确保证其顺序,如 TreeMap 类:另一些映射实现则不保证顺序,如HashMap 类. 注:将可变对象用作映射键时必须格外小心.当对

  • java中 Set与Map排序输出到Writer详解及实例

     java中 Set与Map排序输出到Writer详解及实例 一般来说java.util.Set,java.util.Map输出的内容的顺序并不是按key的顺序排列的,但是java.util.TreeMap,java.util.TreeSet的实现却可以让Map/Set中元素内容以key的顺序排序,所以利用这个特性,可以将Map/Set转为TreeMap,TreeSet然后实现排序输出. 以下是实现的代码片段: /** * 对{@link Map}中元素以key排序后,每行以{key}={val

  • Java Map 按Key排序实例代码

    Java Map 按Key排序 有时候我们业务上需要对map里面的值按照key的大小来进行排序的时候我们就可以利用如下方法来进行排序了, package test; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.List; impo

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

    一.理论准备 Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等. TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法. HashMap的值是没有顺序的,它是按照key的HashCode来实现的,对于这个无序的HashMap我们要怎么来实现排序呢?参照TreeM

  • Java Map 通过 key 或者 value 过滤的实例代码

    今天写根过滤的时候一下子有点愣眼,先是想到用 Java 原生的 map 循环查出来,但是觉得太 low, 后面思考了一下可以用 Java8 的 Lambda,写完了,又发现 Google Guava 有现成的方法,这里一一列出来,供参考使用. 首先提示,如果照搬我的代码的话别忘了引这些依赖 <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</arti

  • java 实现计数排序和桶排序实例代码

    java 实现计数排序和桶排序实例代码 目录 比较和非比较的区别 常见的快速排序.归并排序.堆排序.冒泡排序等属于比较排序.在排序的最终结果里,元素之间的次序依赖于它们之间的比较.每个数都必须和其他数进行比较,才能确定自己的位置. 在 冒泡排序 之类的排序中,问题规模为n,又因为需要比较n次,所以平均时间复杂度为O(n²).在 归并排序.快速排序 之类的排序中,问题规模通过分治法消减为logN次,所以时间复杂度平均 O(nlogn) . 比较排序的优势是,适用于各种规模的数据,也不在乎数据的分布

  • Java执行hadoop的基本操作实例代码

    Java执行hadoop的基本操作实例代码 向HDFS上传本地文件 public static void uploadInputFile(String localFile) throws IOException{ Configuration conf = new Configuration(); String hdfsPath = "hdfs://localhost:9000/"; String hdfsInput = "hdfs://localhost:9000/user/

  • java中的 toString()方法实例代码

    前言: toString()方法 相信大家都用到过,一般用于以字符串的形式返回对象的相关数据. 最近项目中需要对一个ArrayList<ArrayList<Integer>> datas  形式的集合处理. 处理要求把集合数据转换成字符串形式,格式为 :子集合1数据+"#"+子集合2数据+"#"+....+子集合n数据. 举例: 集合数据 :[[1,2,3],[2,3,5]]  要求转成为 "[1,2,3]#[2,3,5]"

  • Java构建树形菜单的实例代码(支持多级菜单)

    效果图:支持多级菜单. 菜单实体类: public class Menu { // 菜单id private String id; // 菜单名称 private String name; // 父菜单id private String parentId; // 菜单url private String url; // 菜单图标 private String icon; // 菜单顺序 private int order; // 子菜单 private List<Menu> children;

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

    Map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等. •TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法. •HashMap的值是没有顺序的,它是按照key的HashCode来实现的,对于这个无序的HashMap我们要怎么来实现排序呢?参照TreeMap的va

  • java token生成和校验的实例代码

    现在越来越多的登录方式都用到了token作为用户登录令牌,所以实现了一个token生成和校验案例. 缺点:该实现方式token是存储在内存中,不适合分布式项目,如需改为分布式项目部署,可把token存储在redis中,其中的实现原理还是保持不变. 一)token编码工具类 package com.oysept.token.utils; /** * token编码工具类 * @author ouyangjun */ public class TokenEncryptUtils { // 编码密码,

  • java实现的各种排序算法代码示例

    折半插入排序 折半插入排序是对直接插入排序的简单改进.此处介绍的折半插入,其实就是通过不断地折半来快速确定第i个元素的 插入位置,这实际上是一种查找算法:折半查找.Java的Arrays类里的binarySearch()方法,就是折半查找的实现,用 于从指定数组中查找指定元素,前提是该数组已经处于有序状态.与直接插入排序的效果相同,只是更快了一些,因 为折半插入排序可以更快地确定第i个元素的插入位置 代码: package interview; /** * @author Administrat

随机推荐