Map集合和之前Collection集合不同,前者是双列,k,v建立对应关系,且k唯一,而Collection是单列类型
位与java.util下需要导包,k,v可以类型相同也可以不同
其有很多实现类如HashMap哈希表,我们之前学过HashSet基于其实现,其单列实现相当于只有k,没有v
查询速度快
1Map常见方法
Vput(K key, V value) 通过给定的key设置value,返回key替换的值,如果之前不存在返回null。
2代码如上,可以看到Map,HashMap的toString方法也是被重写了的
V remove(Object key) 依据key铲除键值对,返回value值,如果key不存在,返回null
3代码如上
V get(Object key)返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回null。
4boolean containsKey(Object key)如果此映射包含指定键的映射关系,则返回true。
5当然还有values()返回Collection集合,size()返回键值对数量
Map遍历
方法keySet(),返回Map的存储键的Set集合,可以通过遍历其获得所有的键
6如上,通过foreach遍历set
7使用迭代器,这里迭代器是Object返回,需要强转
Entry键值对 对象
是Map类内部接口,用于记录键值的映射,其getKey(),getValue()分别获得键值对的键和值,通过map对象的entrySet()返回其键值对的Set集合
8如上,这里记得Entry和map一样,接口需要传入2个列的泛型
如果我们使用自定义的类实例作为Key,记得重写hashCode和equals方法,保证实例的不重复哈希
LinkedHashMap
其查看文档可以知道,是哈希表加上链表实现,维护可预知的迭代顺序
9还是老套路,先使用hashmap,可以发现无序
10使用LinkedHashMap可以发现顺序和放入一致
Hashtable类
是Map接口的实现类,key不可以为null,其是同步的(等同于单线程),但是同步会比较慢
而之前将的HashMap是异步的,线程不安全,但是会比较快,可以使用唯一null作为key
两者的共同点就是底层都是哈希表
jdk1.2以后和vector一样被先进的Collection集合取代了(使用HashMap和ArrayList)
11如上,HashMap允许使用空作为Key,但是Hashtable不可以,运行时报空指针异常,而且注意table是小写
Demo统计用户输入字符串字符次数
12如上
JDK9 of方法
13是JDK9给List,Set,Map添加的静态方法,可以一次添加多个元素,不能用于接口实现类,集合创建后不能改变,不可add,put,remove. set和map不能有重复的元素(map指键)
13如上,我们使用List,注意格式,编译未报错,但是运行时提示不支持额外操作
14如上,我们可以看到运行时报错,Set是不能存储重复元素的
Debug idea
intelliJ idea编辑器的debug放在这里也是很突兀,但是不调整位置了,根据视频位置调整吧,
15 16我们逐行执行for循环,可以看到每次的数据值
网友评论