返回顶部
首页 > 资讯 > 后端开发 > JAVA >4个主要的map实现类
  • 914
分享到

4个主要的map实现类

java教程javamap 2017-10-22 22:10:06 914人浏览 猪猪侠
摘要

map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。其中这四者的区别如下(简单介绍):HashMap:我们最常用的Map,HashMap的值是没有顺序的,他是按照

map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。其中这四者的区别如下(简单介绍):

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

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

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

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

常识:

Collection与Map集合是不是继承自Object?

不是,两个都是接口,Object是类,怎么可能会继承自Object,详细看java.util下的具体接口。

二、Map排序

TreeMap

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

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

public class TreeMapTest {
    public static void main(String[] args) {
        Map map = new TreeMap(
                new Comparator() {
                    public int compare(String obj1, String obj2) {
                        // 降序排序
                        return obj2.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));
        }
    }
}

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

public class TreeMapTest {
    public static void main(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(Entry o1,
                    Entry o2) {
                return o1.getValue().compareTo(o2.getValue());
            }

        });

        for(Map.Entry mapping:list){ 
               System.out.println(mapping.geTKEy()+":"+mapping.getValue()); 
          } 
    }
}

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

public class HashMapTest {
    public static void main(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(Entry o1,
                    Entry o2) {
                return o1.getValue().compareTo(o2.getValue());
            }

        });

        for(Map.Entry mapping:list){ 
               System.out.println(mapping.getKey()+":"+mapping.getValue()); 
          } 
     }
}

--结束END--

本文标题: 4个主要的map实现类

本文链接: https://lsjlt.com/news/2629.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 4个主要的map实现类
    map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。其中这四者的区别如下(简单介绍):HashMap:我们最常用的Map,HashMap的值是没有顺序的,他是按照...
    99+
    2017-10-22
    java教程 java map
  • Java如何实现实体类转Map、Map转实体类
    实体类转Map、Map转实体类 1、创建entity(User.java) package com.jeff.entity; public class User { priva...
    99+
    2024-04-02
  • Java怎么实现实体类转Map、Map转实体类
    这篇文章给大家分享的是有关Java怎么实现实体类转Map、Map转实体类的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。实体类转Map、Map转实体类1、创建entity(User.java)package&nbs...
    99+
    2023-06-20
  • oracle 正则表达式4个主要函数
    Oracle使用正则表达式4个主要函数: 1、regexp_like 只能用于条件表达式,和 like 类似,但是使用的正则表达式进行匹配,语法很简单: 2、regexp_substr 函数...
    99+
    2024-04-02
  • java实体类转成map的实现
    目录java实体类转成map1.第一种2.第二种java实体类与map集合互转java实体类转成map 1.第一种  <!-- 配置gson -->         &l...
    99+
    2024-04-02
  • Javaredis存Map对象类型数据的实现
    目录背景描述实体类父类子类方法1°方法2°背景描述 项目需要将设备采集到的最新经纬度信息存入redis缓存中,方便及时查询检索。考虑到根据检索条件不同,所查询的设备不...
    99+
    2024-04-02
  • hadoop map个数控制怎么实现
    这篇文章主要介绍“hadoop map个数控制怎么实现”,在日常操作中,相信很多人在hadoop map个数控制怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”hadoop map个数控制怎么实现”的疑...
    99+
    2023-06-03
  • Java集合之Map接口的实现类精解
    目录HashMap类1、HashMap类概述2、HashMap的存储结构(底层实现原理)3、HashMap源码中的重要常量LinkedHashMap类TreeMap类1、TreeMa...
    99+
    2024-04-02
  • 利用C++实现一个线程安全的map
    目录第一轮对话请求回复第二轮对话请求回复完整代码本文是使用ChatCPT生成的,最终的代码使用起来没问题。代码是通过两轮对话完善的,后面把对话合并后跑不出理想效果就没尝试了。 第一轮...
    99+
    2023-05-19
    C++实现线程安全的map C++线程安全的map C++ map
  • java实现往hive 的map类型字段写数据
    往hive 的map类型字段写数据 该表的该字段类型是map<string,string> 对应类的该属性的类型需要定义成String,不可定义成Map<Strin...
    99+
    2024-04-02
  • MyBatis 查询 MySQL 实现返回 List<Map> 或 Map 类型数据操作
      MyBatis 查询 MySQL 数据库,返回结果可以是具体的类、Map、List 等等。将查询结果返回 Map 类型的优点是,不需要为本次查询额外创建类。如果只查询某几个特定的列,且不想额外创建...
    99+
    2023-09-06
    mybatis mysql java
  • Map怎么实现按单个或多个Value排序
    本篇内容主要讲解“Map怎么实现按单个或多个Value排序”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Map怎么实现按单个或多个Value排序”吧!Map可以先按照value进行排序,然后按照...
    99+
    2023-07-05
  • 4个免费又好用的wordpress企业主题
    WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。也可以把 WordPress当作一个内容管理系统(CMS)来使用。 WordPress是一款个人博客系统,并逐步演化成一款...
    99+
    2023-09-16
    数据库 php 开发语言 wordpress
  • 分享:销售管理软件的4大主要功能!
    对于企业来说,面对众多客户,其中销售管理软件起到了很大的作用,能够帮助企业实现快速管理跟进客户、合同快速达成等,大大的提高了企业的办公效率和效益,同时,对于企业来说,无规矩不成方圆,规范管理是企业的基础,是向客户提供更好服务的保障,而规范企...
    99+
    2023-06-05
  • Mybatis把返回结果封装成map类型的实现
    目录一、Mybatis把返回结果封装成map类型,表的字段名对应map中的key,字段所属的值对应map中的value二、Mybatis把返回结果封装成map类型,map的key对应...
    99+
    2023-03-19
    Mybatis返回结果封装成map类型 Mybatis返回值封装为map
  • go语言yaml转map、map遍历的实现
    yaml文件内容 apiVersion: policy/v1beta1 kind: PodSecurityPolicy metadata: name: mysql-snaps...
    99+
    2024-04-02
  • javascript主要实现了什么
    这篇文章主要介绍javascript主要实现了什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! javascript最初是为了实现“网页更生动”,jav...
    99+
    2024-04-02
  • ajax主要实现了什么
    这篇文章将为大家详细讲解有关ajax主要实现了什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 ajax主要实现的是页面和web服务器之间数...
    99+
    2024-04-02
  • golang map的实现讲解
    Golang是一门新兴的编程语言,它的map是基于哈希表实现的。在这篇文章中,我们将讨论Golang中map的实现方式。具体来说,我们将介绍哈希表的概念、Golang map的结构和性能优化。哈希表的概念哈希表是一种以键值对存储数据的数据结...
    99+
    2023-05-14
    Golang
  • go map搬迁的实现
    目录能具体解释一下这两种情况吗?下面开始准备搬迁了别着急,正式搬迁才刚刚开始先找找可能的目标桶位置吧遍历bucket链表,一个个迁移事后事(整理)也别忘记了最后,要不要看下是不是全搬...
    99+
    2023-05-16
    go map搬迁 Go map迁移
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作