第一章 Map集合
Map,Debug追踪,斗地主综合案例代码见github
1.1 Map接口
`java.util.Map<k, v>`集合
· Map集合的特点:
- Map 集合是一个双列集合,一个元素包含key,value两个值
- Map 集合中的元素,key和value的数据类型不一定要相同
- Map 集合中的元素,key不允许重复,value可以
- Map 集合中的元素,key和value一一对应
1.2 Map接口的常用子类
1.2.1 HashMap
`java.util.HashMap<k, v>`集合 implements Map<k, v>接口
· HashMap集合的特点:
- HashMap集合的底层是哈希表:查询速度快
JDK1.8前:数组+单向列表
JDK1.8及以后:数组+单向列表/红黑树(链表长度超过8) - 无序集合,存储/取出元素的顺序有可能不一致
1.2.2 LinkedHahMap
`java.util.LinkedHashMap<k, v>`集合 extends HashMap<k, v>集合
· 特点:
- 底层是哈希表+链表:保证迭代的顺序
- 有序的集合,存储/取出的顺序是一致的
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)
· 使用前提:当集合中存储的元素个数已经确定而且不再改变的的时候使用。
· 注意:
- of方法只适用于List接口,Set接口,Map接口,不适用于接口的实现类
- of方法的返回值是不能改变的集合,集合不能再用add、put添加元素了,否则会抛出不支持操作异常
- Set接口和Map接口在调用of方法的时候,不能有重复元素,否则会抛出非法参数异常
2.2 Debug追踪
Debug调试程序:可以让代码逐行执行,查看代码执行过程,调试程序中出现的bug。
使用方式:
- 在行号的右边,鼠标左键单击,添加断点(每个方法的第一行,哪有bug添加到哪里)
- 右键,选择Debug执行程序
- 程序就会停留在添加的第一个断点处
执行程序: - fn+f8:逐行执行程序
- fn+f7:进入方法
- fn+shift+f8:跳出方法
- fn+f9:跳到下一个断点(如果没有下一个,就停止程序)
- fn+ctrl+f2:退出debug模式,停止程序
- Console:切换到控制台