Map接口的注意事项
Map集合是用来存放键值对的集合,因此在进行集合的各项操作之中比较特殊,下面主要列举一下Map接口的使用事项。
文章目录
1. 不能使用迭代输出Map中的全部内容
1.1 Iterator方式输出Map
package chapter_thirteen;
import java.util.*;
/**
* Iterator输出map集合
*/
public class IteratorDemo04 {
public static void main(String[] args) {
Map<String,String> map = new HashMap<String,String>(); //声明Map对象,指定泛型类型
map.put("Hello","World");
map.put("Miss","You");
map.put("Chian","World");
map.put("努力奋斗","deku"); //增加内容
//set集合存储的数据类型为Map的内部类Map.Entry类对象,其中键名为String,键值亦为String
Set<Map.Entry<String,String>> set = map.entrySet(); //声明一个Set集合,指定泛型
Iterator<Map.Entry<String, String>> iterator = set.iterator(); //将Map接口实例化变成Set接口
while (iterator.hasNext()){ //找到Map.Entry类实例
Map.Entry<String,String> temp = iterator.next();
System.out.println(temp.getKey() + "---->" + temp.getValue()); //输出key和value
}
}
}
运行结果
Chian---->World
Hello---->World
Miss---->You
努力奋斗---->deku
1.2 使用foreach输出map集合中的所有内容
package chapter_thirteen;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
* foreach语句输出map集合
*/
public class ForeachDemo02 {
public static void main(String[] args) {
Map<String,String> map = new HashMap<String, String>();
map.put("Hello","World");
map.put("family","friend");
map.put("today","tomorrow");
map.put("yesterday","for years"); //向Map集合中添加元素信息,分为键名和键值
Set<Map.Entry<String,String>> set = map.entrySet(); //获取Map集合内部的Map.Entry类集合,以set集合存储
for (Map.Entry<String,String> entry: set){ //foreach循环遍历Map.Entry集合
System.out.println(entry.getKey() + "---->" + entry.getValue()); //输出map集合中的所有信息
}
}
}
运行结果
yesterday---->for years
Hello---->World
today---->tomorrow
family---->friend
2. 直接使用非系统类作为key
2.1 输出String---->Person的映射
package chapter_thirteen;
import java.util.HashMap;
import java.util.Map;
//用于作为Value值的Person06类
class Person06{
private String name; //声明名称
private int age; //声明年龄
public Person06(){} //无参构造方法
public Person06(String name, int age) { //含参数构造方法
this.name = name;
this.age = age;
}
//setter和getter方法
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;
}
@Override
public String toString() { //覆写的toString()方法
return "Person06{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class HashMapDemo06 {
public static void main(String[] args) {
Map<String,Person06> map = new HashMap<String, Person06>(); //实例化Map集合对象,key为String,value为Person06
map.put("努力奋斗",new Person06("高立卫",20));
map.put("deku",new Person06("孟小雨",20));
map.put("Out Love",new Person06("哈哈",0));
map.put("Our Heart",new Person06("Our Soul",1102)); //为集合中添加内容
System.out.println(map.get("Our Heart")); //输出键名为"Our Heart"对应的键值
}
}
运行结果
Person06{name='Our Soul', age=1102}
2.2 输出Person---->String的映射
package chapter_thirteen;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
/**
* 覆写hashCode()和toString()方法的Person类
* 判断new出来的匿名对象是否相等。
*/
class Person07{
private String name;
private int age;
public Person07(){}
public Person07(String name, int age) {
this.name = name;
this.age = age;
}
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;
}
@Override
public boolean equals(Object o) { //覆写equals()方法
if (this == o) return true;
if (!(o instanceof Person07)) return false;
Person07 person07 = (Person07) o;
return age == person07.age &&
Objects.equals(name, person07.name);
}
@Override
public int hashCode() { //覆写hashCode()方法
return Objects.hash(name, age);
}
@Override
public String toString() { //覆写toString()方法
return "Person07{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
//测试类
public class HashMapDemo07 {
public static void main(String[] args) {
//集合map,其中key为Person07类对象,value为String类对象
Map<Person07,String> map = new HashMap<Person07,String>(); //实例化map集合对象
map.put(new Person07("高立卫",20),"努力奋斗");
map.put(new Person07("孟小雨",20),"deku");
map.put(new Person07("哈哈",0),"Our Love");
map.put(new Person07("Our Soul",1102),"Our Heart"); //为集合中添加内容
System.out.println(map.get(new Person07("哈哈",0))); //输出根据特定的匿名取出的键值
}
}
运行结果
Our Love
小伙伴们要在此处注意哦,如果此时Person07类未覆写equals()和hashCode()方法,
System.out.println(map.get(new Person07("哈哈",0)));
此句执行的结果将会是 null,因为匿名对象的地址是临时随机分配的,所以Map集合无法查找到,如果覆写了equals和hashCode方法,根据name和age属性可以唯一确定一个对象,此时才可以查询的哦~