Map
概述:提供了集合间的映射关系,将键映射到值的对象
1、【Set keySet()】键类似于Set集合,无序,唯一
2、【Collection values()】值类似于List集合,有序,可重复,但是值跟着键走,被迫无序,故类似于Collection集合,部分有序、部分重合
3、键和值有一一对应关系
Map常用方法
增加
V put(K key, V value) | 将key|value存入Map,如果已包含key则替换 |
---|---|
void putAll(Map<? extends K,? extends V> m) | 将一个Map集合中的内容加入到另一个Map |
删除
V remove(Object key) | 根据key删除value |
---|---|
void clear() | 清空Map集合 |
修改(由于一个映射不包含重复的键,故再次添加时即修改)
V put(K key, V value) | |
---|---|
void putAll(Map<? extends K,? extends V> m) |
遍历
Set keySet() | 返回所有的key |
---|---|
V get(Object key) | 返回key对应的value,如不存在返回null |
Collection values() | 返回所有的value |
Set<Map.Entry<K,V>> entrySet() | 将Map对象变成Set集合,包含每一个键值对 |
判断
boolean containsKey(Object key) | 指定key是否存在 |
---|---|
boolean containsValue(Object value) | 指定value是否存在 |
boolean isEmpty() | 集合是否为空 |
其他
int size() | 取出集合长度 |
---|
两种遍历方式:
①根据Key查找Value
获取所有Key的集合,遍历Key的集合,获取到每一个Key,根据Key查找Value
Set<String> keys = map.keySet();
for (String key : keys) {
String value = map.get(key);
System.out.println(key + "|" + value);
}
②根据键值对对象找键和值
获取所有键值对对象的集合,遍历键值对对象的集合,获取到每一个键值对对象,根据键值对对象找键和值
Set<Entry<String, String>> entrys = map.entrySet();
for (Entry<String, String> entry : entrys) {
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key + "|" + value);
}
Map类的相关数据结构只和键有关,和值无关
HashMap(底层数据结构是哈希表,依赖hashCode()和equals())
(当键是自定义类时,该类要实现hashCode()和equals()这两个方法)
可以存空值
TreeMap(底层数据结构是二叉树)
一般排序用TreeMap(当键是自定义类时,要实现 Comparator 接口)
TreeMap<Student, String> tm = new TreeMap<Student, String>(new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
// 先按照年龄排序
int num = s1.getAge() - s2.getAge();
// 年龄相同按照姓名排序
int num2 = (num == 0) ? s1.getName().compareTo(s2.getName()) : num;
return num2;
}
});