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集合。的更多相关文章

  1. Java版本:识别Json字符串并分隔成Map集合

    前言: 最近又看了点Java的知识,于是想着把CYQ.Data V5迁移到Java版本. 过程发现坑很多,理论上看大部分很相似,实践上代码写起来发现大部分都要重新思考方案. 遇到的C#转Java的一些 ...

  2. Java常用的几种集合, Map集合,Set集合,List集合

    Java中  Object是所有类的根 Java集合常用的集合List集合.Set集合.Map集合 Map接口常用的一些方法 size() 获取集合中名值对的数量 put(key k, value v ...

  3. Map集合

    1:Map (1)将键映射到值的对象. 一个映射不能包含重复的键:每个键最多只能映射到一个值. 键值对的方式存在 (2)Map和Collection的区别? A:Map 存储的是键值对形式的元素,键唯 ...

  4. MyBatis的一系列问题的处理(遍历Map集合和智能标签和属性和字段不一样的解决办法 和sql片段)(三)

    一.字段名与属性名(数据库的名字)不一样怎么办? 方案一:在小配置中配置一个resultMapper <!--方案一:resultMapper 字段名与属性名不一致 --> <res ...

  5. Map集合及与Collection的区别、HashMap和HashTable的区别、Collections、

    特点:将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射到一个值. Map集合和Collection集合的区别 Map集合:成对出现 (情侣)                       ...

  6. java://Comparator、Comparable的用法(按照要求将map集合的键值对进行顺序输出)

    import java.util.*; public class Person implements Comparable<Person>//使Person的属性具有比较性 { priva ...

  7. Java集合类学习笔记(Map集合)

    Map用于保存具有映射关系的数据,因此Map集合里保存着两组数据,一组用于保存Map的key,一组用于保存key所对应的value. Map的key不允许重复. HashMap和Hashtable都是 ...

  8. java学习第18天(map集合)

    Map集合是将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值. 存储的是键值对形式的元素,键唯一,值可以重复,有点类似于数据库中的主键加数据.主要功能有: A:添加功能 put ...

  9. Map集合 总结

    (本人第一次写博客,部分内容有参照李刚老师的疯狂java系列图书,如有遗漏错误,请多指教,谢谢.) Java的集合类可分为Set.List.Map.Queue,其中Set.List.Queue都有共同 ...

  10. Map集合的应用及其遍历方式

    ---> HashMap :底层基于哈希表      存储原理也使用哈希表来存放的:            往HashMap添加了元素 ,首先会调用键的hashCode方法 获得一个哈希值,然后 ...

随机推荐

  1. java.util.Date 与 java.sql.Date 之间的转换

    SimpleDateFormat sdf = new SimpleDateFormat("yy-MM-dd HH:mm:ss"); String dateStr = sdf.for ...

  2. JVM学习记录-类加载时机

    虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是类的加载机制. 在Java语言里面,类型的加载.连接和初始化过程都 ...

  3. 一副美丽而庞大的SQL TUNING计划美图

    最近因为很忙,一直忙着开发公司的产品和客户的事情,杂七杂八,忙的不亦乐乎,所以,好久没有来这里写东西,这两天为客户优化了一个系统,优化前CPU持续冲顶爆满,导致系统卡死,应用系统不能正常使用,其中有个 ...

  4. Android编译自己的程序到/system/bin

    背景 有时候我们想创建一个程序,放在系统中,供其他APP执行.我们知道,在生成system.img的时候,编译系统会将out/target/product/[product]/system/bin目录 ...

  5. 从壹开始微服务 [ DDD ] 之终篇 ║当事件溯源 遇上 粉丝活动

    回首 哈喽~大家好,时间过的真快,关于DDD领域驱动设计的讲解基本就差不多了,本来想着周四再开一篇,感觉没有太多的内容了,剩下的一个就是验证的问题,就和之前的JWT很类似,就不打开一个章节了,而且这个 ...

  6. 同源策略 & 高效调试CORS实现

    # 目录 为什么有同源策略? 需要解决的问题 CORS跨域请求方案 preflight withCredentials 附:高效.优雅地调试CORS实现 ----------------------- ...

  7. 死磕 java集合之PriorityQueue源码分析

    问题 (1)什么是优先级队列? (2)怎么实现一个优先级队列? (3)PriorityQueue是线程安全的吗? (4)PriorityQueue就有序的吗? 简介 优先级队列,是0个或多个元素的集合 ...

  8. 【.NETCore开源】开弓没有回头箭

    2019.2.11 开工大吉!经过了半个月的休假,今天回归岗位重新拾起工作,却发现熟悉的代码生疏了.年前的计划回忆不起来了,俗称"节后综合症". 忆半月圈子 过年放假的前几天有多篇 ...

  9. C# .NET Web API 如何自訂 ModelBinder

    各位好!這次要來替大家介紹的是如何在 .NET  Web API 中自訂一個 ModelBinder 透過自定義的 ModelBinder 我們可以很簡單的將 QueryString 傳過來的參數綁定 ...

  10. web项目自定义路由_实现静态资源URL控制

    前言: IIS会默认把:图片.JS.HTML.CSS这些文件当成静态资源处理,为了减少服务器压力,默认这些静态资源是不走URL路由规则控制的. 作为小白及初学者,本人对这些了解甚少,补充基础知识吧: ...