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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • navicatPremium 15激活码最新[最新免费获取]

    (navicatPremium 15激活码最新)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html0HKLM1UCCY-eyJsa…

    2022年3月31日
    98
  • Java的invoke方法[通俗易懂]

    Java的invoke方法[通俗易懂]如果读一些Java或者相关框架的源码,实际上一定会经常出现invoke方法的调用,在自己或者团队封装框架时,如果有时候弄得不好经常也会报invoke相关的错。invoke方法是干什么的?有什么具体用途?首先要了解invoke方法干什么的以及具体用途,实际你要搞清他在源码那个class文件上,他在那个包里,追根溯源。invoke方法来自Method类,可能不会像我们经常用到的基础类型包装类,以及集合类还有他们的扩展和工具类使用的那么多。但是Method类所在的包可是大名鼎鼎的反射Reflact,不是有

    2022年6月7日
    32
  • matlab内建函数怎么不同颜色,matlab分段函数不同颜色绘图

    matlab内建函数怎么不同颜色,matlab分段函数不同颜色绘图Matlab绘制分段函数图像functionfunc_baidu_56568133x=-200:200;y=(x0).*(x.^2+(1-x).^(1/4)-5);figure(1);plot(x,y)fh=@func_baidmatlab绘制分段函数图象k是数组,不能那样比较;逻辑与是&&;j最后应该是一个数组,不是一个数;修改如下:forx=30:1:350if0.015*x…

    2022年6月17日
    41
  • idea激活码2021(破解版激活)

    idea激活码2021(破解版激活),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    100
  • QQ群无故消失或QQ群无故被解散

    QQ群无故消失或QQ群无故被解散最近遇到一个怪事情,关于QQ群的,我有一个QQ群凭空消失了,没有任何通知,没有任何消息,上群管理也查询不到恢复记录。据说是群内有违规信息被强制删除解散了,实在想不出有啥违规信息的,那是一个技术QQ群!…

    2022年5月20日
    199
  • java中json字符串和java对象的转换「建议收藏」

    java中json字符串和java对象的转换「建议收藏」文章目录1、Java与前台的交互2、解析JSON的第三方工具3、JSON数据和Java对象的相互转换Java对象转换JSON字符串JSON字符串转为Java对象1、Java与前台的交互作为后台,Java不仅需要接收前台传递过来的数据,还需要将数据库中的数据查出来打包好发…

    2022年9月13日
    2

发表回复

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

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