【 java 集合】Map 接口常用实现类对比
📋 个人简介
- 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜
- 📝 个人主页:馆主阿牛🔥
- 🎉 支持我:点赞👍+收藏⭐️+留言📝
- 📣 系列专栏:java 小白到高手的蜕变🍁
- 💬格言:要成为光,因为有怕黑的人!🔥
前言
这一节总结一下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框架快速入门
相关文章
- Invalid default: public abstract java.lang.Class org.mybatis.spring.annotation.MapperScan.factoryBe
- 深度剖析Java集合之Vector
- Java面试题: 基础考核-拆箱装箱, 数据类型, MAP
- java文件下载文件名乱码问题解决方案
- java根据key或value对Map进行排序
- Java面试胜经001| 阿里Java面试题118道
- javascript实现java的map对象,js实现new map()
- Java Set,List,Map 区别
- Java Collection或Map的同步
- java Map接口
- java线程与进程的比较
- java多线程三种实现方式
- Java 8 Stream Api 中的 map和 flatMap 操作
- 0316-Java学习-093-【答疑解惑】MavenReportException: Error while generating Javadoc
- 【转】java反射详解
- Java中List Set Map 总结
- 【Java】Java学习笔记-多线程
- java实现request请求参数转map工具类
- Java方法——详解
- 华为OD机试 -入栈出栈(Java) | 机试题+算法思路+考点+代码解析 【2023】
- 【java】itoo项目实战之大数据查询之使用 new map 优化hibernate之级联查询
- Java -- 容器使用 Set, List, Map, Queue
- HDU 4919 打表找规律 java睑板 map 递归
- Java Lambda map返回部分属性
- Java小白入门200例109之Java Map集合详解
- Java多线程基础(一)---Thread API(sleep,yield,优先级,线程类加载器,interrupt)
- Java生成骑缝章带有CA电子签名认证
- Java list、map、set、vector集合类型中的null值
- Java Map接口