当前位置: 首页 > news >正文

【 java 集合】Map 接口常用实现类对比

📋 个人简介

  • 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜
  • 📝 个人主页:馆主阿牛🔥
  • 🎉 支持我:点赞👍+收藏⭐️+留言📝
  • 📣 系列专栏:java 小白到高手的蜕变🍁
  • 💬格言:要成为光,因为有怕黑的人!🔥
    请添加图片描述

目录

    • 📋 个人简介
  • 前言
    • Map概述
      • HashMap
      • LinkedHashMap
      • TreeMap
      • Hashtable
      • Properties
  • 结语

前言

这一节总结一下Map接口的常用实现类,大概写一写案例,下一节我们就分析HashMap的源码!

Map概述

在之前的java集合概述博文中对于Map体系有一张图很清晰:
在这里插入图片描述
Map存储双列数据,存储key-value对的数据,相当于python里的字典,javascript中的对象。

Map接口的实现类有HashMap、TreeMap、Hashtable以及LinkedHashMap和Properties。

下面我们就来对比一下他们的区别!

HashMap

作为 Map 的主要实现类;线程不安全的,效率高;可以存储 null 的 key 和 value 。

public static void main(String[] args) {
        HashMap map = new HashMap();
        map.put(123,null);
        map.put(null,null);
        System.out.println(map);
    }

在这里插入图片描述

LinkedHashMap

HashMap的子类,保证在遍所 map 元素时,可以按照添加的顺序实现遍历。
原因:在原有的 HashMap 底层结构基础上,加了一对指针,指向前一个和后一个元素。
对于频繁的遍历操作,此类执行效率高于 HashMap 。

public static void main(String[] args) {
        Map map = new LinkedHashMap();
        map.put(123,null);
        map.put(null,null);
        map.put("aniu",666);
        System.out.println(map);
    }

在这里插入图片描述
可以看到是按照添加顺序输出的!

TreeMap

保证按照添加的 key - value 对进行排序,实现排序遍历,此时考虑 key 的自然排序或定制排序,要求key必须是同一数据类型或者同一个类创建的对象。底层使用红黑树!

public static void main(String[] args) {
        Map map = new TreeMap();
        map.put(123,null);
        map.put(12,null);
        map.put(54,666);
        map.put(1,666);
        System.out.println(map);
    }

在这里插入图片描述
可以看到是按照key的顺序从小到大输出!
对于自定义类作为key的自然排序和定制排序我不再总结!

Hashtable

Hashtable :作为Map古老的实现类(jdk1.0时Hashtable就出现了,而Map接口才是jdk1.2时才出现的);线程安全的,效率低;不能存储 null 的 key 和 value 。

public static void main(String[] args) {
        Map map = new Hashtable();
        map.put(123,null);
        map.put(null,null);
        System.out.println(map);
    }

在这里插入图片描述
可以看到,确实不能存储null 的 key 和 value 。

Properties

是Hashtable的子类,常用来处理配置文件。 由于属性文件里的key 和 value 都是 String 类型,所以Properties里的key和value都是字符串类型!
另外,存取数据时,建议使用setProperty(String key,String value)方法和getProperty(String key)方法!
这里举个例子,我们操作数据库时,要把一些账户密码放在配置文件中,我们需要把这个配值信息读取!
在这里插入图片描述
上面方式可以快速在idea中创建properties文件!

在这里插入图片描述

public static void main(String[] args) throws Exception {
        Properties pros = new Properties();
        FileInputStream fis = new FileInputStream("jdbc.properties");
        pros.load(fis); // 加载流对应的文件
        String name = pros.getProperty("name");
        String password = pros.getProperty("password");
        System.out.println("name = " + name + ",password = " + password);
        fis.close();
    }

在这里插入图片描述
可以看到配置文件读取成功!

结语

如果你觉得博主写的还不错的话,可以关注一下当前专栏,博主会更完这个系列的哦!也欢迎订阅博主的其他好的专栏。

🏰系列专栏
👉软磨 css
👉硬泡 javascript
👉flask框架快速入门

相关文章:

  • 云原生|kubernetes|安全漏扫神器trivy的部署和使用
  • 记一次靶场实战【网络安全】
  • Linux工具学习之【vim】
  • 基于Python深度学习的垃圾分类代码,用深度残差网络构建
  • 数据结构入门——二叉树(C语言实现)
  • Linux 中 Shell -- /sbin/nologin 的理解
  • 1215. 小朋友排队(树状数组应用 -- 逆序对个数)
  • 10个 Python 高效编程小技巧
  • 深度学习各子领域略览及术语列表
  • UNION ALL和LEFT JOIN的区别和使用场景
  • 【华为OD机试真题 java、python、c++、JsNode】最短木板长度【2022 Q4 100分】
  • STL的理解之list
  • 剑指offer----C语言版----第八天
  • 虚拟现实 VR 碰撞 3D 可视化,图扑打造一体化管控平台
  • SpringSecurity+JWT快速入门
  • docker减少构建镜像大小
  • 【ARMv8 SIMD和浮点指令编程】Libyuv I420 转 ARGB 流程分析
  • 短视频带货流程话术
  • 2023-1-4目前市面上存在的树莓派rp2040控制器
  • 基础算法 - 常见算法模板题(最简洁写法)【上】
  • 央行副行长:研究建立民营中小企业增信制度,破解民营中小企业信用不足等融资制约
  • 加拿大今日大选:房价、印度移民和特朗普,年轻人在焦虑什么?
  • 民航局答澎湃:督促各单位进一步完善航班大面积延误和大面积备降应急处置预案
  • 阿曼外交大臣:伊美下一轮谈判暂定5月3日举行
  • 讲座|现代女性在面对生育、事业与家庭之间的复杂抉择
  • 蚂蚁财富28亿港元要约收购耀才证券,筹谋香港券商牌照