Map集合。
Map集合:
java.util,Map<k,v>
特点:1、键值对 2、key-value一一对应 3、key不允许重复。
Map常用实现类:
java.util.HashMap<k,v> 集合 implement Man<k,v> 接口。
HashMap的特点:1、HashMap集合,底层是哈希表,查询速度快。
2、jdk8之前, 数组+单向链表。 之后:数组+单项链表/红黑树
3、无序集合。
java.util.LinkedHashMap<k,v> 集合 extends HashMap<k,v>
LinkedHashMap 特点:1、底层-- 哈希表+链表, 所以是有序集合。
Map常用方法:
public static void main(String[] args) {
//public V put(K key,V value)
//k不重复,返回值V是null
//k重复,覆盖value,返回被替换的值。
Map<String,String> hashMap=new HashMap<>();
hashMap.put("张玉昊","胡云钰");
hashMap.put("天","云");
System.out.println(hashMap);
// public V remove (Object key):删除指定键对应的元素。
//返回值 V:
// key 存在, 返回被删除的值。 否则返回null。
hashMap.remove("天");
System.out.println(hashMap);
// public V get(Object key) 根据键获取值
//key存在,返回对应的值,否则null
System.out.println(hashMap.get("张玉昊"));
//bool containskey(Object key) 是否包含指定键
System.out.println(hashMap.containsKey("张玉昊"));
}
遍历Map集合:
第一种方式:
public static void main(String[] args) {
Map<String,String> hashMap=new HashMap<>();
hashMap.put("张玉昊","胡云钰");
hashMap.put("天","云");
//Map集合的第一种方式:通过键找值
//Map集合中的方法:Set<K> keySet()
//实现步骤:
//1、keySet()把Map集合的所有key取出来,存到一个Set集合中
//2、遍历set集合,找到key,通过key找value. //Set<String> set= hashMap.keySet();
for(String key : hashMap.keySet()){
System.out.println(hashMap.get(key));
}
}
第二种方式:
public static void main(String[] args) {
Map<String,String> hashMap=new HashMap<>();
hashMap.put("张玉昊","胡云钰");
hashMap.put("天","云");
//Map集合的第二种方式:通过Entry对象遍历(键值对对象)
//Map集合中的方法:
//Set<Map.Entry<K,V> entrySet() 返回映射中包含的
//映射关系的Set视图。
//实现步骤;
//1、entrySet()方法,把Map中的多个Entry对象存入Set集合。
//2、遍历Set集合,获取每个Entry对象
//3、使用getKey() and getValue() 获取键值。
for (Map.Entry<String,String> entry:hashMap.entrySet()){
System.out.println(entry.getKey()+"--"+entry.getValue());
}
}
Hash Map存储自定义类型:
//HashMap存储自定义类型的键值
//Map集合保证key唯一:
//所以,作为key的元素,必须重写hashCode()和equals()
public static void main(String[] args) {
show2();
} public static void show1(){
//Key: String类型
//String类重写了hashCode()and equals(),所以key唯一
//Value:Person类型
//value可以重复。
Map<String,Person> hashMap=new HashMap<>();
hashMap.put("四川",new Person("Sam",16));
hashMap.put("上海",new Person("Penny",19));
hashMap.put("四川",new Person("instead",17));
for (String set:hashMap.keySet()){
System.out.println(set+"--"+
hashMap.get(set));
}
//因为四川重复了,所以第一个被覆盖。
}
public static void show2(){
//Key: Person类型
//必须重写hashCode 和 equals
//value:String
//可重复。
HashMap<Person,String> hashMap=new HashMap<>();
hashMap.put(new Person("天",21),"川农");
hashMap.put(new Person("云",22),"宜院");
hashMap.put(new Person("天",21),"川农1");
for (Map.Entry<Person,String> entry:hashMap.entrySet()){
System.out.println(entry.getKey()+"--"+entry.getValue());
}
//重写前:
//Person{name='天', age=21}--川农
//Person{name='天', age=21}--川农1
//Person{name='云', age=22}--宜院
//重写后:
//Person{name='天', age=21}--川农1
// Person{name='云', age=22}--宜院
}
LinkedHashMap:
java.util.LinkedHashMap<K,V> extend HashMap<K,V>
底层:哈希表+链表 有序。
public static void main(String[] args) {
LinkedHashMap<String,String> linkedHashMap=new LinkedHashMap<>();
linkedHashMap.put("a","a");
linkedHashMap.put("c","c");
linkedHashMap.put("b","b");
System.out.println(linkedHashMap);
//{a=a, c=c, b=b}
}
HashTable集合:
java.util.Hashtable<K,V> implements Map<K,V>
Hashtable: 底层哈希表,是线程安全的集合,单线程,速度慢。
HashMap:底层哈希表,是线程不安全的集合,多线程,速度快。
-----------
HashMap:可null键,null值
Hashtable:不可以。
------
Hashtable 和 Vector ,jdk1.2后,被 HashMap和ArrayList取代
但,Hashtable的子类,Properties,还在用。
Properties集合是唯一和IO结合的集合。
Map集合练习:
判断字符串每个字符出现个数:
public static void main(String[] args) {
LinkedHashMap<String,String> linkedHashMap=new LinkedHashMap<>();
linkedHashMap.put("a","a");
linkedHashMap.put("c","c");
linkedHashMap.put("b","b");
System.out.println(linkedHashMap);
//{a=a, c=c, b=b}
}
JDK9 对集合的优化 of 方法:
public static void main(String[] args) {
//List,Set,Map 接口,添加了一个静态方法,可一次性添加多个元素。
//static <E> List<E> of (E...elements)
//使用前提:
//集合元素固定,不会再改变时。
//注意:
//1、of方法,只用于,List,Set,Map接口,不适用于实现类。
//2、of 的返回值是一个不能改变的集合,不能再用put add
//3、Set 和Map接口在调用of时,不能有重复的元素。
List<String> list=List.of("a","b","c");
System.out.println(list);
}
Map集合。的更多相关文章
- Java版本:识别Json字符串并分隔成Map集合
前言: 最近又看了点Java的知识,于是想着把CYQ.Data V5迁移到Java版本. 过程发现坑很多,理论上看大部分很相似,实践上代码写起来发现大部分都要重新思考方案. 遇到的C#转Java的一些 ...
- Java常用的几种集合, Map集合,Set集合,List集合
Java中 Object是所有类的根 Java集合常用的集合List集合.Set集合.Map集合 Map接口常用的一些方法 size() 获取集合中名值对的数量 put(key k, value v ...
- Map集合
1:Map (1)将键映射到值的对象. 一个映射不能包含重复的键:每个键最多只能映射到一个值. 键值对的方式存在 (2)Map和Collection的区别? A:Map 存储的是键值对形式的元素,键唯 ...
- MyBatis的一系列问题的处理(遍历Map集合和智能标签和属性和字段不一样的解决办法 和sql片段)(三)
一.字段名与属性名(数据库的名字)不一样怎么办? 方案一:在小配置中配置一个resultMapper <!--方案一:resultMapper 字段名与属性名不一致 --> <res ...
- Map集合及与Collection的区别、HashMap和HashTable的区别、Collections、
特点:将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射到一个值. Map集合和Collection集合的区别 Map集合:成对出现 (情侣) ...
- java://Comparator、Comparable的用法(按照要求将map集合的键值对进行顺序输出)
import java.util.*; public class Person implements Comparable<Person>//使Person的属性具有比较性 { priva ...
- Java集合类学习笔记(Map集合)
Map用于保存具有映射关系的数据,因此Map集合里保存着两组数据,一组用于保存Map的key,一组用于保存key所对应的value. Map的key不允许重复. HashMap和Hashtable都是 ...
- java学习第18天(map集合)
Map集合是将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值. 存储的是键值对形式的元素,键唯一,值可以重复,有点类似于数据库中的主键加数据.主要功能有: A:添加功能 put ...
- Map集合 总结
(本人第一次写博客,部分内容有参照李刚老师的疯狂java系列图书,如有遗漏错误,请多指教,谢谢.) Java的集合类可分为Set.List.Map.Queue,其中Set.List.Queue都有共同 ...
- Map集合的应用及其遍历方式
---> HashMap :底层基于哈希表 存储原理也使用哈希表来存放的: 往HashMap添加了元素 ,首先会调用键的hashCode方法 获得一个哈希值,然后 ...
随机推荐
- MYSQL——数据库存储引擎!
本人安装mysql版本为:mysql Ver 14.14 Distrib 5.7.18, for Win64 (x86_64),查看mysql的版本号方式:cmd-->mysql --vers ...
- #Java学习之路——基础阶段二(第九篇)
我的学习阶段是跟着CZBK黑马的双源课程,学习目标以及博客是为了审查自己的学习情况,毕竟看一遍,敲一遍,和自己归纳总结一遍有着很大的区别,在此期间我会参杂Java疯狂讲义(第四版)里面的内容. 前言: ...
- API 测试的具体实现
目录 API 测试的具体实现 基于 Spring Boot 构建的 API 使用 cURL 命令行工具进行测试 使用图形界面工具 Postman 进行测试 如何应对复杂场景的 API 测试? 总结 A ...
- Jenkins配置从节点
配置从节点步骤 在Master的站点上创建节点配置信息 在Slave访问Jenkins站点,然后下载运行服务Slave端必须安装Jdk 两种运行方式: windows 服务 运行jar包 成功后的节点 ...
- ES 10 - Elasticsearch的索引别名和索引模板
目录 1 索引模板概述 1.1 什么是索引模板 1.2 索引模板中的内容 1.3 索引模板的用途 2 创建索引模板 3 查看索引模板 4 删除索引模板 5 模板的使用建议 5.1 一个index中不能 ...
- 前端笔记之ES678&Webpack&Babel(下)AMD|CMD规范&模块&webpack&Promise对象&Generator函数
一.AMD和CMD规范(了解) 1.1传统的前端开发多个js文件的关系 yuan.js中定义了一个函数 function mianji(r){ return 3.14 * r * r } main.j ...
- Dapper 链式查询 扩展
Dapper 链式查询扩展 DapperSqlMaker Github地址:https://github.com/mumumutou/DapperSqlMaker 欢迎大佬加入 Demo: 查询 ...
- 一起学Android之Storage
概述 在Android开发中,存储(Storage)的方式根据具体的需求不同而不同,例如数据对应用程序是私有的还是其他应用程序(和用户)可以访问的,以及保存数据需要多大的空间. 存储分类 主要的存储方 ...
- 【转载】Win7利用任务计划程序实现定时关机
在Win7.Win8或者Win10系统中,如果要实现电脑的自动定时关机,不需要借用任何的外部程序,直接系统自带的任务计划程序即可实现电脑的定时自动关机,支持设定电脑关机时间以及执行频率次数,如固定每天 ...
- springboot 多线程执行
一.springboot开线程执行异步任务 1.Spring通过任务执行器TaskExecutor,来实现多线程和并发编程,使用ThreadPoolTaskExecutor可实现一个基于线程池的Tas ...