1. Map的使用
通过上方Map和Set的模型我们知道了,Map中存储的是一个<Key,Value>的键值对结构。那么Map它是一个接口,底层有HashMap和TreeMap使用了这个接口。
编辑
因此,我们不能直接实例化(new)一个Map对象,SortedMap也是一个接口,也不能实例化。但可以实例化Map底层的HashMap和TreeMap。因此,我们使用Map来操作数据时,使用的就是HashMap和TreeMap了。
编辑
1.1Map的说明
在Map这个集合中,Map中Key值是唯一的,Value值可不唯一,借助以下代码来理解:
public static void main(String[] args) { Map<Character,Integer> map = new HashMap<>(); map.put('A',3);//键值对A,3 map.put('B',3);//键值对B,3 map.put('A',6);//键值对A,6 System.out.println(map);//输出map集合 }
输出:
编辑通过输出结果我们发现到,第一行的键值对A,3没有输出。只输出了第二行键值对B,3和第三行的键值对A,6。因此我们可以确定Map集合中Key值唯一、Value值不唯一。
1.2 Java中Map常用的方法
方法 | 返回类型及参数类型 | 说明 |
get() | get(Object key) | 返回key对用的value |
getOrDefault() | getOrDefault(Object key, V defaultValue) | 返回key对应的value,key不存在时返回默认值 |
put() | put(K key, V value) | 设置key对应的value |
remove() | remove(Object key) | 删除key对应的映射关系 |
keySet() | Set<K> keySet() | 返回所有key的不重复集合 |
values() | Collection<V> values() | 返回所有的value的可重复集合 |
entrySet() | Set<Map.Entry<K, V>> entrySet() | 返回所有的key,value映射关系 |
containsKey(Object key) | boolean containsKey(Object key) | 判断是否包含key |
containsValue(Object value) | boolean containsValue(Object value) | 判断是否包含value |
以下为这些方法的实例演示:
public static void main(String[] args) { //实例化一个HashMap对象为map这个集合 Map<Character,Integer> map = new HashMap<>(); //put方法 map.put('A',3);//put方法给map集合添加键值对A,3 map.put('B',3);//put方法给map集合添加键值对B,3 System.out.println("put两个键值对后map集合为: "+map); System.out.println("输出A对应的value值: "+map.get('A'));//get方法 System.out.println("输出C对应的value值没有则输出默认值666: "+map.getOrDefault('C', 666)); //remove方法 map.remove('A'); System.out.println("删除A后的map集合为: "+map); //keySet方法 System.out.println("map集合中Key不重复值组成的集合: "+map.keySet()); //entrySet方法 System.out.println("map集合中的所有Key=Value映射(键值对)关系:"+map.entrySet()); //containsKey方法 System.out.println("判断map集合中是否包含Key为A的值: "+map.containsKey('A')); //containsValue方法 System.out.println("判断map集合中是否包含Value为3的值: "+map.containsValue(3)); }
输出以下内容:
编辑
通过上方所有知识点的学习,我们能总结以下几点:
- Map是一个抽象类,不能被实例化,只能实例化底层的HashMap和TreeMap
- Map中存储的键值对Key是唯一的,Value是不唯一的
- Map中的Key可以全部分离出来,存储在Set中的任何一个子集合中(通过Set<K> keySet()方法)。因为Key不能重复!
- Map中的Value也可以全部分离出来,存储在Collection的任何一个子集合中(通过方法Collection<V> values()方法),因为Value可以重复!
- Map中的键值对Key值不能直接修改,Value可修改,如果要修改Key只能先删除Key值再重新插入。
2. Set的使用
Set与Map主要的不同有两点:Set是继承自Collection的接口类,Set中只存储了Key。
编辑
2.1Java中Set的常用方法
方法 | 返回类型及参数类型 | 说明 |
add() | boolean add(E e) | 添加元素,但重复元素不会被添加成功 |
clear() | void clear() | 清空集合 |
contains() | boolean contains(Object o) | 判断 o 是否在集合中 |
iterator() | Iterator<E> iterator() | 返回迭代器 |
remove() | boolean remove(Object o) | 删除集合中的 o |
size() | int size() | 返回set中元素的个数 |
isEmpty() | boolean isEmpty() | 检测set是否为空,空返回true否则返回false |
toArray() | Object[] toArray() | 将set中的元素转换为数组返回 |
containsAll() | boolean containsAll(Collection<?> c) | 集合c中的元素是否在set中全部存在,是返回true否则返回false |
addAll() | boolean addAll(Collection<? extends E> c) |
将集合c中的元素添加到set中,可以达到去重效果 |
大家可以下来自行测试一番。