一、Map集合特点
Map集合(双列集合)一次添加一对元素,Collection集合(单列集合)一次添加一个元素
接口 Map<K,V>,实际上存储的是键值对
特点:
Map和Collection没有关系,所以就不存在迭代器,那如何获取Map中所有key-value对(两种方法)
三步走示意图
只是一个嵌套而已
将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
也就是说Map中必须保证键的唯一性
二、常用方法
1.添加:value = put(key,value);返回前一个和key相关联的值,如果没有返回null
2.删除:void clear();把Map中的所有映射关系清除
value remove(key):根据指定的key,删除key-value键值对
3.判断: boolean containsKey(key)
boolean containsValue(value)
boolean isEmpty();
4.获取:value get(key):通过键获取值,如果没有该键,返回null,也就意味着可以判断Map中没有该建
int size():获取键值对的个数
方法演示
import java.util.HashMap;
import java.util.Map;
public class Main
{
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<Integer,String>();
method(map);
}
public static void method(Map<Integer, String> map){//姓名学号
//1.添加
System.out.println(map.put(1,"a"));
System.out.println(map.put(1, "b"));//存相同键,值会被覆盖
map.put(3, "c");
map.put(4, "d");
System.out.println(map);
//删除
map.remove(3);
System.out.println(map);
//判断
System.out.println("containsKey:"+map.containsKey(3));
System.out.println("containsValue:"+map.containsValue("d"));
//获取
System.out.println("Get:"+map.get(4));
System.out.println("Get:"+map.get(8));//判断8在不是
}
}
Map和Collection没有关系,所以就不存在迭代器,那如何获取Map中所有key-value对(两种方法)
1.通过ketSet()方法(重点掌握),返回此映射中包含的键的Set
视图。
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Main
{
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<Integer,String>();
KeySetMehod(map);
}
public static void KeySetMehod(Map<Integer, String> map){
map.put(1, "a");
map.put(4, "b");
map.put(3, "c");
map.put(5, "d");
//取出map中的所有key-value对,分三步走
//1.通过keySet()得到所有的key所在的Set集合,Set中有迭代器
//2.通过迭代器,获取所以的key
//3.通过Map中的get()获取对应的value
Set<Integer> keyIntegers = map.keySet();
Iterator<Integer> it = keyIntegers.iterator();
while(it.hasNext()){
Integer key = it.next();
System.out.println("key - value : "+key+" - "+map.get(key));
}
}
}
三步走示意图
2.通过entrySet()
:返回此映射中包含的映射关系的Set
视图。
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Main
{
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<Integer,String>();
KeySetMehod(map);
}
public static void KeySetMehod(Map<Integer, String> map){
map.put(1, "a");
map.put(4, "b");
map.put(3, "c");
map.put(5, "d");
//映射关系的类型:Map.Entry类型
//Map.Entry<K, V>中的方法
/*boolean equals(Object o) 比较指定对象与此项的相等性。
K getKey() 返回与此项对应的键。
V getValue() 返回与此项对应的值。
int hashCode() 返回此映射项的哈希码值。
V setValue(V value) 用指定的值替换与此项对应的值(可选操作)。
*/
Set<Map.Entry<Integer,String>> entry = map.entrySet();
Iterator<Map.Entry<Integer,String>> it = entry.iterator();
while(it.hasNext()){
//it.next是映射关系
Map.Entry<Integer,String> maEntry = it.next();
System.out.println("key - value : "+maEntry.getKey()+" - "+maEntry.getValue());
}
}
}
关于Map.Entry<key,value>加强理解
interface MMap
{
public static interface Entry{
void get();
}
}
class XX implements MMap.Entry
{.....}
只是一个嵌套而已
3.通过values()方法:返回此映射中包含的值的Collection
视图。
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Main
{
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<Integer,String>();
KeySetMehod(map);
}
public static void KeySetMehod(Map<Integer, String> map){
map.put(1, "a");
map.put(4, "a");
map.put(3, "c");
map.put(5, "d");
Collection<String> cel = map.values();
Iterator<String> it = cel.iterator();
while(it.hasNext()){
String in = it.next();
System.out.println("key - value : "+in);
}
}
}