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. SM干货篇:你应该具备的提问技巧!

    在成为Scrum Master(SM)之前,我曾担任过许多团队的技术负责人.工作内容之一就是做决定,而且我认为自己做得挺好:坚定果断是我性格的一部分. 然而,当我成为Scrum Master之后,这样 ...

  2. 毕业样本=[华威大学毕业证书]Warwick原件一模一样证书

    华威大学毕业证[微/Q:2544033233◆WeChat:CC6669834]UC毕业证书/联系人Alice[查看点击百度快照查看][留信网学历认证&博士&硕士&海归& ...

  3. 【STM32H7教程】第6章 STM32H7工程模板建立(IAR8)

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第6章   STM32H7工程模板建立(IAR8) 本章 ...

  4. mysql怎样配置ODBC数据源

      一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成.所以说mysql配置ODBC数据源也很重要. 工具/原料 ...

  5. 版本号对比 -- Python实现

    相同位数版本号大小比较: def abc(str1, str2): if str1 == "" or str2 == "": print("输入包含空 ...

  6. OO第二单元作业小结

    前言 转眼已是第九周,第二单元的电梯系列作业已经结束,终于体验了一番多线程电梯之旅. 第一次作业是单电梯的傻瓜调度,虽然是第一次写多线程,但在课程PPT的指引下,写起来还是非常容易:第二次作业是单电梯 ...

  7. react native中使用echarts

    开发平台:mac pro node版本:v8.11.2 npm版本:6.4.1 react-native版本:0.57.8 native-echarts版本:^0.5.0 目标平台:android端收 ...

  8. 代码规范:idea上添加阿里巴巴Java开发插件

    在一个项目中,不可缺少的是书写代码的规范,没有好的代码规范约束,大家各写各的,十分不利于代码的维护与修改.     首先来看看如何在idea上添加这个插件: 直接上图 点击右边的蓝色按钮就可以安装了, ...

  9. MsSql去掉重复记录

    假如有这样一张表news:字段:id,title,time,image,author,现在表中有1万多条记录,其中title重复的有上千条.如何才能一次性将title重复记录删除呢? ID Title ...

  10. c/c++ open函数的阻塞和非阻塞

    调用open函数时,可以指定是以阻塞方式还是以非阻塞方式打开一个文件描述符. 阻塞方式打开: int fd = open("/dev/tty", O_RDWR|O_NONBLOCK ...