map<K,V>:将键(k)映射到值(v)的对象,通过键可以找到对应的值

Map集合的特点:

1、双列集合,一个元素包含两个值(key-Value)

2、key和value类型可以相同,也可以不同

3、key和value是一一对应的

4、key不允许重复,value是可以重复的

常用实现类:

HashMap<K,V> implements Map<K,v>接口

特点:

1、底层是哈希表,查询速度快

JDK1.8之前,数组+单向链表

JDK1.8之后,数组+单向链表/红黑树(链表长度超过8):提高查询的速度

2、元素无序:储存元素和取出元素顺序可能不一致

LinkedHashMap

1、linkedhashmap集合底层是哈希表+链表

2、linkedhashmap集合是一个有序的集合,储存元素和取出元素的顺序是一致的

常用方法:

public V put(K key,V value):把指定的键与指定的值添加到Map集合中

储存键值对的时候,key不重复,返回值v是null

储存键值对的时候,key重复,会使用新的value替换map中重复的value,返回被替换的value值

Map<String,String>map=new HashMap<>();
String v1=map.put("a","A");
v1:null
String v2=map.put("a","aa");
v2:aa
map:[a-aa]

一般用put时,无需接受返回值

map.put("a","A");
map.put("b","B");
map.put("c","C");
map:[a-A,b-B,c-C]

public V remove(Object Key):把指定的键所对应的键值对元素在Map集合中删除,返回被删除元素的值

key存在,v返回被删除的值

key不存在,v返回null,使用包装类接收返回值(防止空指针异常)

建议:使用数据类型时,尽量使用包装类

String s=map.remove("a");
s:A
map:[b-B,c-C]

boolean V containsKey(Object key):判断集合中是否包含指定的键

包含返回true,不包含返回false

boolean b1=map.containsKey("b");true
boolean b2=map.containsKey("e");false

public v get(Object key):根据指定的键,在Map集合中获取对应的值

key存在,返回对应的值

key不存在,返回null

String s1=map.get("b");
String s2=map.get("e");
s1:B
s2:null

public Set<K> keyset():获取Map集合中所有的键,储存到Set集合中

Map集合第一种遍历方式:键找值

keySet()取键放入   set遍历set集合  get

Set<String>set=map.keySet();
for(String s:set){sout(map.get(s));
}​

public Set<Map.Entry<K,V>>entrySet():获取到Map集合中所有键值对对象的集合(Set集合)

entrySet()把entry对象放入set,用getVaule和getKey访问

Set<Map.Entry<String,Integer>>set=map.entrySet();
for(Map.Entrt<String,Integer> entry:set){sout(entry.getKey()+entry.getValue());}

HashMap储存自定义类型键值

Map集合保证key是唯一的。作为key的元素,必须重写hashcode和equals方法,以保证key唯一

由于string类型已经重写 了hashcode和equals方法,所以元素不会重复

HashMap<String,Stu>map;
map.put("a",new Stu("1",1));
map.put("b",new Stu("2",2));
map.put("a",new Stu("3",3));
map:b 2 2,a 3 3
HashMap<Stu,String>map;
map.put(new Stu("a",1),a);
map.put(new Stu("a",1),b);
//如果以自定义类型为键,那么在自定义类中要重写hashcode和equals方法,防止重复@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Stu stu = (Stu) o;return age == stu.age && Objects.equals(name, stu.name);}@Overridepublic int hashCode() {return Objects.hash(name, age);}

LinkedHashMap:

1、继承了HashMap类

2、底层原理:哈希表+链表(记录元素顺序),所以LinkedHashMap是有序的(存入和取出顺序一致)

LinkedHashMap<String,String>map=new LinkedHashMap<>();
map.put("c",c);
map.put("a",a);
map:c-c,a-a

Hashtable:

1、底层是一个哈希表,是一个线程安全的集合,是单线程集合,速度慢

2、不可以存储null值,null键(其他的hash集合可以)

3、JDK1.2之后已经被HashMap取代

【java笔记】map集合相关推荐

  1. 1.6 Java遍历Map集合

    Java遍历Map集合的四种方式 Map 集合的遍历与 List 和 Set 集合不同.Map 有两组值,因此遍历时可以只遍历值的集合,也可以只遍历键的集合,也可以同时遍历.Map 以及实现 Map ...

  2. java 定义map集合_java基础-Map集合

    java基础-Map集合 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Map集合概述 我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它 ...

  3. (10)Java泛型-Map集合-集合框架工具类-可变参数-静态导入

    -- 部分1.5新特性Java泛型-Map集合-集合框架工具类 泛型 概述: JDK1.5版本以后出现的新特性,用于解决安全问题,是一个类型安全机制. 对于泛型可以这样理解: 没有使用泛型时,只要是对 ...

  4. 黑马程序员----------------java基础-----------------Map集合

     ------- <a href="http://www.itheima.com" target="blank">android培训</a ...

  5. 笔记:Java中Map集合的基本功能及遍历方式

    Map集合概述: public interface Map<K,V> 将键映射到值的对象.不能包含重复的键; 每个键可以映射到最多一个值. 该接口代替了Dictionary类,它是一个完全 ...

  6. JAVA中Map集合的使用举例

    首先创建一个Emp类,再将几个Emp对象添加到Map集合中. Emp的id作为Map的键,并将id为"005"的对象从集合中删除. package com.han;import j ...

  7. [Java基础]Map集合的遍历

    Map集合是Java中非常常用的一个集合,通过Map集合可以实现对数据的快速检索和插入删除等操作:同样对Map集合的遍历也是十分重要的:如果你之前学过C++,那么对于Map的遍历操作可就不能像是C++ ...

  8. java map集合遍历方法,Java的Map集合的三种遍历方法

    集合的一个很重要的操作---遍历,学习了三种遍历方法,三种方法各有优缺点~~ 1. package com.myTest.MapText; import java.util.Collection; i ...

  9. java akiba,Map集合的遍历(java)

    Map集合通过entrySet 和 keySet都可以使用迭代器 以及for循环拿到key和value: import java.util.HashMap; import java.util.Iter ...

  10. java用map集合实现随机抽奖源码

    import java.util.HashMap; import java.util.Random;//用map实现抽奖 public class demo3 {public static void ...

最新文章

  1. JS 设计模式之初识(一)-单例模式
  2. django 文档生成器
  3. Android opencv cvCvtColor()的转换
  4. TipsDBConfigListener
  5. .NET正则表达式使用高级技巧之替换类
  6. leetcode练习——数组篇(1)(std::ios::sync_with_stdio(false);std::cin.tie(nullptr);)
  7. 小凡Linux国产网游《时空浩劫》安装+体验
  8. SpringBoot精通系列-开发案例之配置Druid数据库连接池
  9. rtt面向对象oopc——4.IO设备管理之父类调用子类方法
  10. 两万字深度介绍分布式系统原理,一篇通透
  11. msys2软件包管理工具pacman常用命令
  12. C++局部重载new delete方法剖析
  13. latex python_怎么在 LaTeX 中排版 Python 代码?
  14. php 去除div标签,JavaScript_清除div下面的所有标签的方法,复制代码 代码如下: div id=s - phpStudy...
  15. 计算机常用1700英语单词
  16. Spring Boot(04)自定义filter
  17. JS获取当天23时59分59秒
  18. 华为、海尔之后,阿里在全屋智能领域有新动作,这次牵手的是萤石
  19. 13 岁女孩因发布JavaScript被捕,写个死循环你就进去了?
  20. 要么好好地活着,要么就死得其所

热门文章

  1. JAVA动态加载JAR包执行程序
  2. 30 网站项目建设流程概述
  3. ICPC程序设计题解书籍系列之九:罗勇军《算法竞赛入门到进阶》
  4. Bailian4147 汉诺塔问题(Hanoi)
  5. 《程序设计技术》第六章例程
  6. 51Nod1682 中位数计数【中位数】
  7. ICPC程序设计题解书籍系列之三:秋田拓哉:《挑战程序设计竞赛》(第2版)
  8. 图案、标签、logo
  9. utilities(matlab)—— l2row/l2col
  10. 也谈压缩感知(compressive sensing)