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方法 获得一个哈希值,然后 ...
随机推荐
- 关于EffictiveC++笔记
我根据自己的理解,对原文的精华部分进行了提炼,并在一些难以理解的地方加上了自己的"可能比较准确"的「翻译」.
- The following untracked working tree files would be overwritten by merge
git pull的时候遇到这样的问题: The following untracked working tree files would be overwritten by merge balabal ...
- .NetCore WebApi——基于JWT的简单身份认证与授权(Swagger)
上接:.NetCore WebApi——Swagger简单配置 任何项目都有权限这一关键部分.比如我们有许多接口.有的接口允许任何人访问,另有一些接口需要认证身份之后才可以访问:以保证重要数据不会泄露 ...
- LeetCode算法题-Unique Morse Code Words(Java实现)
这是悦乐书的第318次更新,第339篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第186题(顺位题号是804).国际莫尔斯电码定义了一种标准编码,其中每个字母映射到一系 ...
- 前端笔记之NodeJS(一)初识NodeJS&内置模块&特点
一.NodeJS简介 NodeJS是开发服务器后台的东西,和PHP.JavaEE.python类似,和传统的浏览器的关注DOM的JS完全不同,将JavaScript触角伸到了服务器端.内核是Chrom ...
- Java进阶篇设计模式之七 ----- 享元模式和代理模式
前言 在上一篇中我们学习了结构型模式的组合模式和过滤器模式.本篇则来学习下结构型模式最后的两个模式, 享元模式和代理模式. 享元模式 简介 享元模式主要用于减少创建对象的数量,以减少内存占用和提高性能 ...
- WAF开放规则定义权:专家策略+用户自定义策略=Web安全
在第一期“漫说安全”栏目中,我们用四格漫画的形式介绍了基于深度学习的阿里云WAF到底智能在哪里,能帮客户解决什么问题. 在今天的这期栏目里,我们依然通过漫画这种通俗易懂的方式,与大家分享阿里云WAF的 ...
- 细说并发编程-TPL
本节导航 基本概念 并发编程 TPL 线程基础 windows为什么要支持线程 线程开销 CPU的发展 使用线程的理由 如何写一个简单Parallel.For循环 数据并行 Parallel.For剖 ...
- 学习python的第一天
2019.4.25自我总结 一.Typora 关于用Typora 自我感觉良好,基本快捷键也比较简单,ps:还是要多用用 二.编程 1.编程语言 是用来定义计算机程序的形式语言.它是一种被标准化的交流 ...
- Java对字符串加密并返回星号※
If you don't look back, you'll never know I waiting for you behind you. Java对字符串加密并返回星号※ PasswordUt ...