1、Map即使键值对的集合的接口抽象。
我们可以通过key的值来获得相应的值,将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。键只允许有一个空值,值可以有多个空值。
2、Map的特点:
①数据成对出现
②数据的键是唯一的
③一个键只能对应一个值
④值可以重复
⑤键允许有一个为空,值可以多个是空。
3、面试题:
问:map集合和Collection集合的区别?
答:①Map集合是键值对的集合,Collection是单一出现的数据的集合
②Map的键唯一的,而Collection的子接口List集合中的元素是可以重复的,set是唯一的
③map是夫妻对,Collection是光棍。
4、map的功能
①添加功能
②删除功能
③获取功能
④判断功能
⑤遍历
package cn.tx.map;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapDemo {
public static void main(String[] args) {
//定义一个Map
Map<String,String> map = new HashMap<String,String>();
//放入键值对
map.put("gushangzao", "shiqian");
map.put("jishiyu", "songjiang");
map.put("huaheshang", "luzhishen");
//map中键是不能重复的,覆盖了上面的值
map.put("huaheshang", "hahaha");
System.out.println(map);
//定义另一个Map
Map<String,String> map1 = new HashMap<String,String>();
map1.put("张龙", "招呼");
map1.put("赵虎", "管理");
//把一个Map内容加到另一个map中
map.putAll(map1);
System.out.println(map);
//清空map
map1.clear();
System.out.println(map1);
//根据key来删除一个键值
map.remove("huaheshang");
System.out.println(map);
//根据指定的key来获得对应的值,如果没有相应的值就返回null
String val = map.get("jishiyu");
System.out.println(val);
//拿到map中所有的key
Set<String> set = map.keySet();
System.out.println(set);
//根据key的集合来获得每一个key对应的值
for(String key : set){
//根据当前的key来获得对应的值
String val1 = map.get(key);
System.out.println(val1);
}
}
}
package cn.tx.map;
public class Person {
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Person){
return false;
}
Person p = (Person)obj;
if(this.id == p.id&&this.age == p.age&&
this.name!=null&&p.name!=null&&this.name.equals(name)){
return true;
}
return false;
}
@Override
public int hashCode() {
return 1;
}
}
package cn.tx.map;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class MapDemo2 {
public static void main(String[] args) {
//定义一个Map,创建一个字符串作为key,person作为值的map集合
Map<String,Person> map = new HashMap<String,Person>();
Person p = new Person(1,"张三",25);
map.put("key1",new Person(1,"张三",25));
map.put("key2",new Person(2,"李四",24));
map.put("key3",new Person(3,"王五",21));
System.out.println(map);
//是否包含指定的key
boolean ob = map.containsKey("key1");
System.out.println(ob);
//是否包含某个值
//boolean ob1 =map.containsValue(p);
boolean ob1 =map.containsValue(new Person(1,"张三",25));
System.out.println(ob1);
//清空所有
//map.clear();
//判断集合是否为空
boolean isEmp = map.isEmpty();
System.out.println(isEmp);
//遍历集合
Set<String> set = map.keySet();
for(String key:set){
Person p1 = map.get(key);
System.out.println(p1);
}
/**
* 遍历
*/
//获得键值对set集合
Set<Entry<String, Person>> entry = map.entrySet();
for(Entry<String, Person> sp:entry){
//获得每一项的key值和Value值
String str = sp.getKey();
Person p4 = sp.getValue();
System.out.println("jian:"+str+"zhi:"+p4);
}
}
}
package cn.tx.map;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapDemo1 {
public static void main(String[] args) {
//定义一个Map,创建一个字符串作为key,person作为值的map集合
Map<String,Person> map = new HashMap<String,Person>();
map.put("key1",new Person(1,"张三",25));
map.put("key2",new Person(2,"李四",24));
map.put("key3",new Person(3,"王五",21));
System.out.println(map);
}
}