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. CentOS DesktopEntry

    IBM Developer  :  https://www.ibm.com/developerworks/cn/linux/l-cn-dtef/index.html [Desktop Entry] N ...

  2. 前端随笔 - JavaScript中的闭包

    前阵子重新复习了一下js基础知识,第一篇博客就以分享闭包心得为开始吧. 首先,要理解闭包,就必须要了解一个概念:作用域链. 作用域链 作用域代表着可访问变量的集合,变量分为全局变量和局部变量两种,在函 ...

  3. 神奇的Scala Macro之旅(三)- 实际应用

    在上一篇中,我们示范了使用macro来重写 Log 的 debug/info 方法,并大致的介绍了 macro 的基本语法.基本使用方法.以及macro背后的一些概念, 如AST等.那么,本篇中,我们 ...

  4. asp.net core系列 43 Web应用 Session分布式存储(in memory与Redis)

    一.概述 HTTP 是无状态的协议. 默认情况下,HTTP 请求是不保留用户值或应用状态的独立消息. 本文介绍了几种保留请求间用户数据和应用状态的方法.下面以表格形式列出这些存储方式,本篇专讲Sess ...

  5. Tomcat 8.0的并发优化 - 优化server.xml的配置

    目录 1 Tomcat的3种运行模式 1.1 BIO - 同步阻塞IO模式 1.2 NIO - 同步非阻塞IO模式 1.3 APR - 可移植运行时模式 2 Tomcat的并发配置(配置Connect ...

  6. Windows中使用Mysql-Proxy实现Mysql读写分离

    1.简介 读写分离:当业务量上来时,往往一台单机的mysql数据库不能满足性能需求,这时候就需要配置主从库读写分离来解决性能瓶颈.简单的来说,就是原先一台数据库既读又写,现在改成一台写和1台以上读. ...

  7. 《阿里巴巴 Java开发手册》读后感

    前言 只有光头才能变强 前一阵子一直在学Redis,结果在黄金段位被虐了,暂时升不了段位了,每天都拿不到首胜(好烦). 趁着学校校运会,合理地给自己放了一个小长假,然后就回家了.回到家才发现当时618 ...

  8. 关于页面传参,decodeURI和decodeURIComponent

    之前写过一个关于页面传参的,但是是前端相对于自己的页面做的跳转,也就是页面1,跳转到页面2,里面带的参数.这里可以参考我上一篇文章,包括里面参数中如果有数组和json格式的情况.但是需要注意的是,我前 ...

  9. 简单地做一下“回到顶部”按钮,用jQuery实现其隐藏和显示

    1.首先,我们要准备HTML代码: <div id="return-top"> <a href="#top">返回顶部</a> ...

  10. Android Glide详细使用教程

    此处我只是做个记录,后边再补充 原文地址:http://www.jufanshare.com/content/35.html 这篇文章写的比较清楚,还附有Demo代码.算是不错的Android Gli ...