Map
双列集合一次可以存两个元素
每次存储的首个元素称为:键:特点是不能重复
第二个元素称为:值 :特点是可以重复
这样的一个组合称为:键值对-键值对对象。java语言用:Entry对象表示
小结:
Interface Map<K,V> 是顶级接口。K表示:键的数据类型, V表示:值的数据类型。
其中 键是不能重复的,值是可以重复的。
键和值是一一对应的,每一个键只能找到自己对应的值。
(键 + 值)这样的一个组合称为:"键值对"或"键值对对象"。java语言叫:"Entry对象"
Map的基本使用:
它是一个接口,使用时需要创建子类对象。
Map接口的增 ,删, 改, 查方法:
所有的实现类都可以用
增 删 改 查
V put(K key, V value) 添加元素
//注意:如果添加时键是不存在的,那么就把键值对都添加到地图中
//如果键出现了重复的现象,那么会覆盖原来的值,并返回被覆盖的值
V remove(Object key) 根据键,从该地图中删除元素,返回被删除的 值
void clear() 从该地图中删除所有的元素
boolean containsKey(Object key) 判断地图中是否包含指定键的,有则返回true
boolean containsValue(Object value) 判断地图中是否包含一个或多个指定的值,有则返回true
boolean isEmpty() 判断地图是否为空
int size() 返回集合的长度,也就是键值对的个数。
Map的遍历方法:
V get(Object key) //返回 指定的键 对应 的值
Set<K> keySet() //返回Set集合包含了所有键的集合
//使用以上方法组合进行遍历
//先获取所有的键,存入Set集合并返回,根据Map中的get(Object key)方法获得对应的值
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("键001", "值aaa");
map.put("键002", "值bbb");
map.put("键003", "值ccc");
map.put("键004", "值ddd");
//获取所有的键,存入Set集合并返回
Set<String> keys = map.keySet();
for (String key : keys) {
//根据Map中的get(Object key)方法获得对应的值
String value = map.get(key);
System.out.println(key+"----"+value);
}
}
Set<Map.Entry<K,V>> entrySet()
// 返回Set集合包含所有的键值对对象(Entry对象)
K getKey();//获得键
V getValue();//获得值
System.out.println("==================");
//获取所有的Entry对象,存入Set集合并返回
Set<Map.Entry<String, String>> entries = map.entrySet();
for (Map.Entry<String, String> entry : entries) {
//根据Set集合中的getKey setValue方法获得键和值
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key+"----"+value);
}
}
void forEach(BiConsumer<? super K,? super V> action)
//对键和值进行操作的方法,也可进行打印
System.out.println("==================");
map .forEach(
(key, value) -> {
System.out.println(key + "----" + value);
}
);
HashMap类:
介绍:
HashMap是Map的实现类。
使用时可以直接根据Map接口中的方法即可。
HashMap与HashSet底层都是以哈希表结构实现的。
注意:
HashMap底层是哈希表结构的
依赖hashCode方法和equals方法保证键的唯一
如果键要存储的是自定义对象,那么必须要重写hashCde和equals方法
TreeMap类:
介绍:
TreeMap是Map的实现类。
使用时可以直接根据Map接口中的方法即可。
TreeMap底层是以红黑树结构实现的。
TreeMap原理:
存储对象时只关心键,不关心值
存储规则同TreeSet,都要遵从红黑树的规则
注意:
TreeMap底层是以红黑树结构实现的。
依赖自然排序或者比较器排序,对键进行排序,不关心值是什么
如果键存储的是自定义对象,那么需要实现Comparable接口或者在创建TreeMap对象的时候给出比较器排序规则