当前位置:网站首页>6.Map接口与实现类
6.Map接口与实现类
2022-08-09 09:23:00 【过来我的小熊】
Map接口与实现类
Map体系集合
graph TD;
Interface.Map-->Class.HashMap
Interface.Map-->Interface.SortedMap
Interface.SortedMap-->Class.TreeMap
Interface:接口
Class:实现类
Map接口的特点:
- 用于存储任意键值对(Key-Value)
- 键:无序,无下标,不允许重复(唯一)
- 值:无序,无下标,允许重复
Map父接口
特点:存储一对数据(Key-Value),无序,无下标,键不可重复,值可重复
Set(Map.Entry<K,V>) 键值匹配的Set集合
Collection values() 返回包含所有值的Collection集合
方法:
V put(K key, V value) 将对象存入到集合中,关联键值。Key重复则覆盖原值
Object get(Object key) 根据键获取对应的值
Set keySet(K) 返回所有的Key 返回的是一个Key(键)
Set<Map.Entry<K,V>> entrySet() 返回集合中包含关系的Set集合 返回的个一个Entry(键值对)
package com.jhkj.map;
import java.util.HashMap;
import java.util.Map;
/**
* Map接口的使用
* 特点:
* 1.存储的为键值对
* 2.键不能重复,值可以重复
* 3.无序
*/
public class Demo1 {
public static void main(String[] args) {
// 创建Map对象
Map<String,String> map = new HashMap<>();
// 1.添加数据
map.put("cn","中国");
map.put("uk","英国");
map.put("usa","美国");
System.out.println("元素个数:" + map.size());
System.out.println(map.toString());
// 2.删除数据
map.remove("usa");
System.out.println(map.toString());
// 3.遍历数据
// 3.1使用keySet()
System.out.println("----------使用keySet()----------");
for (String key : map.keySet()) {
System.out.println(key + "-----" + map.get(key));
}
// 3.2使用entrySet()
System.out.println("----------使用entrySet()------------");
for (Map.Entry<String, String> entry : map.entrySet()) {
System.out.println(entry.getKey() + "------" + entry.getValue());
}
// 4.判断
// 判断Key是否存在
System.out.println(map.containsKey("cn"));
// 判断Value是否存在
System.out.println(map.containsValue("俄罗斯"));
}
}
Map集合的实现类
- HashMap(重点):
- 存储结构:哈希表(数组+链表+红黑树)
- JDK1.2版本,线程不安全,运行效率快;允许用null 作为key或者value
- Hashtable(了解一下):
- jdk1.0版本,线程安全,允许效率慢;不允许null作为key或是value
- Properties(Hashtable的子类):
- Hashtable的子类,要求key和value都是String。通常用于配置文件的读取
- TreeMap:
- 存储结构:红黑树
- 实现了SortedMap接口(是Map的子接口),可以对key自动排序
HashMap源码分析总结
- HashMap刚创建时,table时null,为了节省空间,当添加第一个元素时,table容量调整为16
- 当元素个数大于阈值(16*0.75=12)时,会进行扩容,扩容后大小为原来的2倍,目的时减少调整元素的个数
- Jdk1.8 当每个链表长度大于8时,并且元素个数大于等于64时,会调整为红黑树,目的提高执行效率
- jdk1.8 当链表长度小于6时,调整成链表
- jdk1.8以前,链表是头插入,jdk1.8以后是尾插入
HashMap 与 HashSet 的关系
- 实际上HashSet实现类中调用的就是HashMap类
public HashSet() {
map = new HashMap<>();
}
add方法调用的就是HashMap中的Key
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
TreeSet 与 TreeMap 的关系
- 实际上TreeSet实现类中调用的就是TreeMap类
public TreeSet() {
this(new TreeMap<E,Object>());
}
边栏推荐
- 自动化测试简历编写应该注意哪方面?有哪些技巧?
- Consolidation of Questionnaire Questions and Answers
- 游戏测试的概念是什么?测试方法和流程有哪些?
- Lecture 4 SVN
- 奥维地图电脑端手机端不能用了,有没有可替代的地图工具
- 【个人学习总结】CRC校验原理及实现
- MySQL Leak Check (4) Stored Procedures and Cursors
- TestNG使用教程详解
- 软件测试流程包括哪些内容?测试方法有哪些?
- "The camera can't be used" + win8.1 + DELL + external camera + USB drive-free solution
猜你喜欢
本体开发日记02-sparql简单查询
JS报错-Uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on...
The era of Google Maps is over, how to view high-definition satellite image maps?
本体开发日记03-排错进行时
使用图新地球无法加载谷歌地球的完美解决方法(附软件下载)
接口测试的基础流程和用例设计方法你知道吗?
性能测试报告包括哪些内容?模板范文哪里找?看这里
按字节方式和字符方式读取文件_加载配置文件
Ontology Development Diary 01-Jena Configuration Environment Variables
一篇文章让你彻底搞懂关于性能测试常见术语的定义
随机推荐
常用功能测试的检查点与用例设计思路
一个项目的整体测试流程有哪几个阶段?测试方法有哪些?
手机APP测试流程规范和方法你知道多少?
What are the basic concepts of performance testing?What knowledge do you need to master to perform performance testing?
运行flutter项目时遇到的问题修改flutter为国内镜像
接口开发规范及测试工具的使用
MySQL transaction isolation
on duplicate key update
你一定要看的安装及卸载测试用例的步骤及方法总结
RPC服务远程漏洞
Django实现对数据库数据增删改查(一)
测试用例的原则、缺陷报告怎么写你都知道吗?
中国打造国产“谷歌地球”清晰度吓人
Max Flow P
6.File类
makefile学习-解决目标文件输出路径问题
测试计划包括哪些内容?目的和意义是什么?
unittest测试框架原理及测试流程解析,看完绝对有提升
MySQL Leak Detection and Filling (3) Calculated Fields
选择黑盒测试用例设计方法的综合策略方案总结