11-Map,Debug

第一章 Map集合

Map,Debug追踪,斗地主综合案例代码github

1.1 Map接口

`java.util.Map<k, v>`集合

· Map集合的特点:

  1. Map 集合是一个双列集合,一个元素包含key,value两个值
  2. Map 集合中的元素,key和value的数据类型不一定要相同
  3. Map 集合中的元素,key不允许重复,value可以
  4. Map 集合中的元素,key和value一一对应

1.2 Map接口的常用子类

1.2.1 HashMap

`java.util.HashMap<k, v>`集合 implements Map<k, v>接口

· HashMap集合的特点:

  1. HashMap集合的底层是哈希表:查询速度快
    JDK1.8前:数组+单向列表
    JDK1.8及以后:数组+单向列表/红黑树(链表长度超过8)
  2. 无序集合,存储/取出元素的顺序有可能不一致

1.2.2 LinkedHahMap

`java.util.LinkedHashMap<k, v>`集合 extends HashMap<k, v>集合

· 特点:

  1. 底层是哈希表+链表:保证迭代的顺序
  2. 有序的集合,存储/取出的顺序是一致的

1.3 Map接口中的常用方法

  • public V put(K key, V value) : 把指定的键与指定的值添加到Map集合中。
    返回值:V
     存储键值的时候,如果key不重复,返回null;
     存储键值的时候,如果key重复,会使用新的value替换原来的,返回被替换的value值。

  • public V remove(Object key): 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。
    返回值:V
     key存在,v返回被删除的值;
     key不存在,v返回null。

  • public V get(Object key) 根据指定的键,在Map集合中获取对应的值。
    返回值:V
    如果key存在,返回对应的value值;
    如果不存在,返回null。

  • boolean containsKey(Object key) 判断集合中是否包含指定的键。
    包含返回ture,否则false。

1.4 Map遍历 键找值方法

遍历方法:

  • public Set<K> keySet(): 获取Map集合中所有的键,存储到Set集合中。
    · 使用迭代器或增强for遍历Set集合,获取Map集合中的每个key。
    · 通过Map集合中的方法get(key),通过key获取value。

1.5 Map遍历 Entry键值对方法

遍历方法:

  • public Set<Map.Entry<K,V>> entrySet() : 获取到Map集合中所有的键值对对象的集合(Set集合)。
    · 使用Set集合,获得每个Entry对象。set.iterator()
    · 使用Entry对象中的getValue()getKey()获取键值。
    在这里插入图片描述

在这里插入图片描述

1.6 HashMap存储自定义类型

• Map集合需要重写hashCode()和equals()方法,以保证key唯一。
• key不允许重复,存取无序。

1.7 LinkedHashMap

`java.util.LinkedHashMap <K, V>` extends HashMap<K, V>

· Map接口的哈希表和链接列表的实现,具有可欲知的迭代顺序。即如果要保证map中存放的key和取出的顺序一致,可以使用 LinkedHashMap集合来存放。
· 底层原理:哈希表+链表
· key不允许重复,存取有序。

1.8 Hashtable

`Java.util.Hashtable<K, V>`集合 implement `Map<K, V>`接口

• Hashtable:底层也是一个哈希表,线程安全(同步)的集合,是单线程集合,速度慢
• HashMap:底层是一个哈希表,线程不安全(不同步)的集合,是多线程集合,速度快
• 之前学的所有集合都可以存储null值,null键。但Hashtable集合不能存储null值,null键。
• Hashtable与Vector一样,Hashtable是双列集合的“祖宗”,在JDK1.2之后被更先进集合(**HahMap集合**)取代。
• 不过Hashtable的子类`Properties`依旧活跃。它是<font color = #F9000>唯一一个和IO流相结合</font>的集合。

第二章 补充知识点

2.1 JDK9 对集合添加的优化

·JDK9的新特性:
· List接口Set接口Map接口:里面增加了一个静态方法of,可以一次性向集合中添加多个元素。
static<E> List<E> of (E… elements)
· 使用前提:当集合中存储的元素个数已经确定而且不再改变的的时候使用。
· 注意:

  1. of方法只适用于List接口,Set接口,Map接口,不适用于接口的实现类
  2. of方法的返回值是不能改变的集合,集合不能再用add、put添加元素了,否则会抛出不支持操作异常
  3. Set接口和Map接口在调用of方法的时候,不能有重复元素,否则会抛出非法参数异常

2.2 Debug追踪

Debug调试程序:可以让代码逐行执行,查看代码执行过程,调试程序中出现的bug。
使用方式:

  • 在行号的右边,鼠标左键单击,添加断点(每个方法的第一行,哪有bug添加到哪里)
  • 右键,选择Debug执行程序
  • 程序就会停留在添加的第一个断点处
    执行程序:
  • fn+f8:逐行执行程序
  • fn+f7:进入方法
  • fn+shift+f8:跳出方法
  • fn+f9:跳到下一个断点(如果没有下一个,就停止程序)
  • fn+ctrl+f2:退出debug模式,停止程序
  • Console:切换到控制台