Map接口
1.Map提供了一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key快速查找value,key和value是object类型。
2.Map中的键值对以Entry类型的对象实例形式存在。
3.键(key值)不可重复,value值可以重复,每个键最多只能映射到一个值。
4.Map接口提供了分别返回key值集合、value值集合以及Entry(键值对)集合的方法。
5.Map支持泛型。
HashMap类
HashMap是Map的一个重要实现类,也是最常用的,基于哈希表实现,其中的Entry对象是无序排列的,Key值和value值都可以为null,但是HashMap只能有一个key值为null的映射(key值不可重复)。
Map添加数据
V put(K key, V value):将指定的值与此映射中的指定键关联。如果此映射以前包含一个该键的映射关系,则用指定值替换旧值(当且仅当 m.containsKey(k) 返回 true 时,才能说映射 m 包含键 k 的映射关系)。
key :与指定值关联的键,value : 与指定键关联的值。
Map<String, Student> students=new HashMap<String, Student>();
Scanner console = new Scanner(System.in)
String ID = console.next();
Student newStudent = new Student(ID, name);
students.put(ID, newStudent);
遍历Map
Set<Map.Entry<K,V>> entrySet()
:返回此映射中包含的映射关系的 Set 视图。
Set keySet():返回此映射中包含的键的 Set 视图。
返回的set 受映射支持,所以对映射的更改可在此 set 中反映出来,反之亦然。如果对该 set 进行迭代的同时修改了映射(通过迭代器自己的 remove 操作除外),则迭代结果是不确定的。set 支持元素移除,通过 Iterator.remove、 Set.remove、 removeAll、 retainAll 和 clear 操作可从映射中移除相应的映射关系。它不支持 add 或 addAll 操作。
V get(Object key):返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。
1.通过keySet+get方法
// 通过keySet方法,返回Map中的所有“键”的Set集合
Set<String> keySet = students.keySet();
// 遍历keySet,取得每一个键,再调用get方法取得每个键对应的value
for (String stuId : keySet) {
Student st = students.get(stuId);
if (st != null)
System.out.println("学生:" + st.name);
}
2.通过entrySet方法来遍历Map
// 通过entrySet方法,返回Map中的所有键值对
Set<Entry<String, Student>> entrySet = students.entrySet();
for (Entry<String, Student> entry : entrySet) {
System.out.println("取得键:" + entry.getKey());
System.out.println("对应的值为:" + entry.getValue());
}
Map删除数据
V remove(Object key):如果存在一个键的映射关系,则将其从此映射中移除。返回此映射中以前关联该键的值,如果此映射不包含该键的映射关系,则返回 null。如果此映射允许 null 值,则返回 null 值并不一定表示该映射不包含该键的映射关系;也可能该映射将该键显示地映射到 null。调用返回后,此映射将不再包含指定键的映射关系。key:从映射中移除其映射关系的键。
students.remove(ID);
Map修改数据
还是运用put方法,此时key是要修改的键,value是一个新传入的值。