Map 集合
-Map集合特点
Map 的特点。
- Map每个元素由键与值两部分组成
- Map键不能重复,每个键对应一个值
- 键和值可以为null
java.util.Map<K, V>是一个接口,注意和Collection接口并没有直接联系。
第一个泛型代表:键是什么类型
第二个泛型代表:值是什么类型
二者可以相同,也可以不同。
key-(学号)不能重复
value-(姓名)可以重复
Map的常用实现类有:
1. HashMap:昨天学习的HashSet其实底层就是在复用HashMap。里面也是哈希表,速度也是嗷嗷快。
2. LinkedHashMap:底层也是哈希表,但是额外还有链表,从而维护顺序。
3. TreeMap:带有键的大小排序功能。
注意事项:
由于Map当中的key不能重复,那么就要考虑怎么确定元素对象是否重复?
如何确定两个对象是一样还是不一样:由equals和hashCode方法决定。
-使用Map集合添加方法保存数据
public V put(K key, V value):添加一个键值对儿,返回被替换的本来的value值。
public V remove(Object key):根据键删除对应的键值对儿,返回value值。
public V get(Object key):根据键,获取对应的value值。
public Set<K> keySet():获取所有的键集合。
public Collection<V> values():获取所有的值。
-使用”键找值”的方式遍历Map集合
注意事项: 如果自定义的类型,当做Map里面的value使用,那么没有任何要求。value可以重复。 如果自定义的类型,当做Map里面的key使用,那么key不可以重复,就必须覆盖重写equals和hashCode。
既然Map和Collection接口没有直接联系,那么Map也没有实现java.lang.iterable接口,所以Map不能直接使用迭代器。 keySet():获取所有的键,然后再根据键获取值get方法。
-使用”键值对”的方式遍历Map集合
Entry键值对对象遍历Map集合的原理。
Map中存放的是两种对象,一种称为key(键),一种称为value(值),它们在在Map中是一一对应关系,这一对对象又称做Map 中的一个Entry(项)。Entry将键值对的对应关系封装成了对象。即键值对对象,这样我们在遍历Map集合时,就可以从每一个键值对(Entry)对象中获取对应的键与对应的值。
entrySet():直接获取所有别的键值对儿。
-使用HashMap存储自定义键值对的数据
java.util.LinkedHashMap是HashMap的子类, 里面也有哈希表,速度也比较快,但是额外还有链表,用来专门维护顺序。
hashMap中的排序
一不一样(相同比较器):由equals和hashCode决定。
谁大谁小(大小比较器):由Comparable或者外部指定的Comparator接口决定。
注意事项:
如果希望对自定义的类型对象进行排序,那么必须实现Comparable接口。
下面是集合中补充的方法:
1.containsKey方法:
用来判断是否包含指定的键。
2.getOrDefault方法:
获取键对应的值;如果没有,那么返回第二个参数,代表默认值。
3.静态方法of,
从Java 9开始,集合的接口当中添加了静态方法of,用来快速生成集合。 注意事项: 通过这种方式创建出来的集合,是不可变集合。 如果尝试改变集合当中的内容,那么将会发生UnsupportedOperationException。