java map()_java之map的基本介绍

java map()_java之map的基本介绍map简介在讲解Map排序之前,我们先来稍微了解下map。map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。其中这四者的区别如下(简单介绍):HashMap我们最常用的Map,它根据key的HashCode值来存储数据,根据key可以直接获取它的Value,同时它具有很快的访问速度。HashMap最多只允许一条记录的…

大家好,又见面了,我是你们的朋友全栈君。

map简介

在讲解Map排序之前,我们先来稍微了解下map。map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。其中这四者的区别如下(简单介绍):

HashMap

我们最常用的Map,它根据key的HashCode 值来存储数据,根据key可以直接获取它的Value,同时它具有很快的访问速度。HashMap最多只允许一条记录的key值为Null(多条会覆盖);允许多条记录的Value为 Null。非同步的。

TreeMap

能够把它保存的记录根据key排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。TreeMap不允许key的值为null。非同步的。

Hashtable

与 HashMap类似,不同的是:key和value的值均不允许为null;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢。

LinkedHashMap

保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的.在遍历的时候会比HashMap慢。key和value均允许为空,非同步的

map的排序

TreeMap的排序

TreeMap默认是升序的,如果我们需要改变排序方式,则需要使用比较器:Comparator。

Comparator可以对集合对象或者数组进行排序的比较器接口,实现该接口的public compare(T o1,To2)方法即可实现排序,该方法主要是根据第一个参数o1,小于、等于或者大于o2分别返回负整数、0或者正整数。如下:

复制代码 代码如下:

public classTreeMapTest {public static voidmain(String[] args) {

Map map = new TreeMap(new Comparator() {public intcompare(String obj1, String obj2) {//降序排序

returnobj2.compareTo(obj1);

}

});

map.put(“c”, “ccccc”);

map.put(“a”, “aaaaa”);

map.put(“b”, “bbbbb”);

map.put(“d”, “ddddd”);

Set keySet =map.keySet();

Iterator iter =keySet.iterator();while(iter.hasNext()) {

String key=iter.next();

System.out.println(key+ “:” +map.get(key));

}

}

}

运行结果如下:

d:ddddd

c:ccccc

b:bbbbb

a:aaaaa

上面例子是对根据TreeMap的key值来进行排序的,但是有时我们需要根据TreeMap的value来进行排序。对value排序我们就需要 借助于Collections的sort(List list, Comparator super T> c)方法,该方法根据指定比较器产生的顺序对指定列表进行排序。但是有一个前提条件,那就是所有的元素都必须能够根据所提供的比较器来进行比较。如下:

复制代码 代码如下:

public classTreeMapTest {public static voidmain(String[] args) {

Map map = new TreeMap();

map.put(“d”, “ddddd”);

map.put(“b”, “bbbbb”);

map.put(“a”, “aaaaa”);

map.put(“c”, “ccccc”);//这里将map.entrySet()转换成list

List> list = new ArrayList>(map.entrySet());//然后通过比较器来实现排序

Collections.sort(list,new Comparator>() {//升序排序

public int compare(Entryo1,

Entryo2) {returno1.getValue().compareTo(o2.getValue());

}

});for(Map.Entrymapping:list){

System.out.println(mapping.getKey()+”:”+mapping.getValue());

}

}

}

运行结果:

a:aaaaa

b:bbbbb

c:ccccc

d:ddddd

HashMap的排序

我们都是HashMap的值是没有顺序的,他是按照key的HashCode来实现的。对于这个无序的HashMap我们要怎么来实现排序呢?参照TreeMap的value排序,我们一样的也可以实现HashMap的排序。

复制代码 代码如下:

public classHashMapTest {public static voidmain(String[] args) {

Map map = new HashMap();

map.put(“c”, “ccccc”);

map.put(“a”, “aaaaa”);

map.put(“b”, “bbbbb”);

map.put(“d”, “ddddd”);

List> list = new ArrayList>(map.entrySet());

Collections.sort(list,new Comparator>() {//升序排序

public int compare(Entryo1,

Entryo2) {returno1.getValue().compareTo(o2.getValue());

}

});for(Map.Entrymapping:list){

System.out.println(mapping.getKey()+”:”+mapping.getValue());

}

}

}

运行结果:

a:aaaaa

b:bbbbb

c:ccccc

d:ddddd

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/156610.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • reaver-wps

    reaver-wps概述Reaver是暴力破解接入点PIN码的一种工具。这里简单说明,PIN码是8位数字,且第8位是由校验和,由前7位可以推出。而前7位又分为4和3两部分,所以暴力尝试最多10000+1000=11000次即可完成,破解所需的时间通常在2-5小时。支持的网卡驱动完全支持ath9krtl8187carl19170ipw2000rt2800pcirt73usb部分支持ath5kiwlagn

    2022年5月4日
    91
  • OllyDBG 入门

    OllyDBG 入门一 OllyDBG 的安装与配置 OllyDBG1 10 版的发布版本是个 ZIP 压缩包 只要解压到一个目录下 运行 OllyDBG exe 就可以了 汉化版的发布版本是个 RAR 压缩包 同样只需解压到一个目录下运行 OllyDBG exe 即可 OllyDBG 中各个窗口的功能如上图 简单解释一下各个窗口的功能 更详细的内容可以参考 TT 小组翻译的中文帮助 反汇编窗口 显示被调试程序的反汇编代码 标题栏上的地址 HEX 数据 反汇编 注释可以通过在窗口中右击出现的菜单界面选项 gt 隐藏

    2025年5月9日
    4
  • 用C语言链表编写学生成绩管理系统[通俗易懂]

    用C语言链表编写学生成绩管理系统[通俗易懂]本代码供读者学习使用,请不要随意转载。一、设计题目:学生成绩管理系统二、目的与要求每位学生记录包含有学号、姓名、性别、出生日期、三门功课的成绩(高等数学、大学英语、C语言)、总分和平均分系统菜单:(1)录入学生记录(2)添加学生记录(3)删除学生记录(4)修改学生记录(要求输入密码)(5)查找学生记录(按学号、按姓名)(6)按总分对记录进行降序排列…

    2022年9月22日
    0
  • navicat 2021激活码【在线注册码/序列号/破解码】

    navicat 2021激活码【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    44
  • 分享psd格式怎么预览的方法和psd文件缩略图插件[通俗易懂]

    分享psd格式怎么预览的方法和psd文件缩略图插件[通俗易懂]内容提要:文章对psd文件格式进行了使用说明,另外关于psd格式怎么预览的问题提供了一个补丁供学习者使用,需要这个psd格式预览补丁的朋友直接下载按说明文件进行操作。 Photoshop教程中制作的文件就是PSD文件。PSD文件格式可以将制作文件时所用到的图层、蒙版、通道等等信息全部保存起来,也就是说PSD文件是可再次编辑的文件。对PS感兴趣想学习交流的朋友可加PS学习交流群:14257

    2022年6月12日
    102
  • createmutex函数参数含义_pthread_create函数

    createmutex函数参数含义_pthread_create函数CreateMutexCreateMutex函数的作用是找出当前系统是否已经存在指定进程的实例,如果没有则创建一个互斥体。//VC声明HANDLECreateMutex(LPSECURITY_ATTRIBUTESlpMutexAttributes,//指向安全属性的指针BOOLbInitialOwner,//初始化互斥对象的所有者LPCTSTRlpName//指向互斥对象名的指针);一个应用:HANDLEhMutex;hMutex=CreateMutex(

    2022年10月5日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号