一.定义
1.Map集合是一个双列集合,以键值对的形式存在
2.将键和值捆绑到一起存放(Map.Entry)
3.一个映射不能包含重复的键
4.如果出现相同的键,会用新的值覆盖老的值
二.Map接口和Collection接口的不同
1.Map是双列的,Collection是单列的
2.Map集合的数据结构针对键有效, 跟值无关, 3.Collection 集合的数据结构是针对元素有效
三.常用方法
添加方法:
V put(K key , V value): 添加元素
如果键是第一次存储, 直接存储元素,返回null
如果键不是第一个存在, 就用值把以前的值替换掉,返回以前的值
删除方法:
void clear() : 移除所有的键值对元素
V remove(Object key) : 根据键删除键值对元素, 并把值返回
判断方法:
boolean containsKey(Object key) : 判断集合是否包含指定的键
boolean containsValue(Object value): 判断集合是否包含指定的值
boolean isEmpty: 判断集合是否为空
获取方法:
Set<Map.Entry<K,V>> entrySet() : 获取所有的键值对
V get(Object key) : 根据键获取值
Set keySet() : 获取集合中所有键的集合
Collection values() : 获取集合中所有值的集合
int size() : 返回集合中键值对的个数
四.举例
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
//添加方法
map.put("张三", 18);
map.put("李四", 24);
map.put("王五", 26);
map.put("赵六", 19);
map.put("田七", 18);
System.out.println(map);
//判断键是否存在
boolean f = map.containsKey("张三");
System.out.println(f);
//判断值是否存在
flg = map.containsValue(18);
System.out.println(f);
//判断集合是否为空
flg = map.isEmpty();
System.out.println(f);
//根据键获取值
Integer i = map.get("田七");
System.out.println(i);
//获取集合中元素的个数
int size = map.size();
System.out.println(size);
//获取集合中所有的键值对
Set<Map.Entry<String, Integer>> entry = map.entrySet();
System.out.println(entry );
//获取集合中所有键
Set<String> key = map.keySet();
System.out.println(key);
//获取集合中所有的值
Collection<Integer> value = map.values();
System.out.println(value);
}
五.Map集合的遍历
获取所有键的集合的遍历
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("张三", 18);
map.put("李四", 24);
map.put("王五", 26);
map.put("赵六", 19);
map.put("田七", 18);
Set<String> keyset = map.keySet();
Iterator<String> it = keyset.iterator();
while (it.hasNext()) {
String key = it.next();
Integer value = map.get(key);
System.out.println("键:"+key+" 值:"+value);
}
}
获取所有的值的遍历
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("张三", 18);
map.put("李四", 24);
map.put("王五", 26);
map.put("赵六", 19);
map.put("田七", 18);
Collection<Integer> values = map.values();
Iterator<Integer> it = values.iterator();
while (it.hasNext()) {
Integer value = it.next();
System.out.println("值:"+value);
}
}
获取所有键值对的遍历
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("张三", 18);
map.put("李四", 24);
map.put("王五", 26);
map.put("赵六", 19);
map.put("田七", 18);
Set<Entry<String, Integer>> entrySet = map.entrySet();
Iterator<Entry<String, Integer>> it = entrySet.iterator();
while (it.hasNext()) {
Map.Entry<String,Integer> entry = it.next();
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println("键:"+key+" 值:"+value);
}
}
六. HashMap
1.定义
1).底层使用的是数组
2).HashMap就是通过我们存入的key获取到一个hash值, 经过计算之后, 获取到一个数组角标, 然后将key和value封装到一个Entry里面, 然后存入数组
3).当数组容量不够的时候, 会自动扩容一倍
2.构造方法
1)HashMap():
构造一个具有默认初始容量(16) 和默认加载因子(0.75)的空HashMap
2)HashMap(int initialCapacity):
构造一个带指定初始容量和默认加载因子 (0.75) 的空HashMap
3)HashMap(int initialCapacity, float loadFactor):
构造一个带指定初始容量和加载因子的空HashMap
4)HashMap(Map<? extends K, ?extends V> m):
构造一个映射关系与制定Map相同的新HashMap
3.常用方法
1)put(K key, V value) : 在此映射中关联指定值与指定键
2)putAll(Map<? extends K, ?extends V> m) : 将另外一个map集合复制到此集合中