Map集合的第一种遍历方式:通过键找值方式
Map集合中的方法:
set keySet()返回此映射中包含的键的set视图。
实现步骤:
1.使用Map集合中的方法keySet(),把Map集合中所有的Key取出来,存储到一个set集合中
2.遍历set集合,获取map集合中每一个key
3.通过map方法get(key),通过key找到value
private static voidshow01() {
Map map=new HashMap<>();
map.put("xiangqi", "111");
map.put("xiangqi1", "222");
map.put("xiangqi2", "333");
map.put("xiangqi3", "444");
System.out.println(map);//使用keySet方法取出所有的Key,存放在set集合中
Set set =map.keySet();//遍历set集合获取每一个key//使用迭代器遍历set集合
Iterator it = set.iterator();while(it.hasNext()){
String key=it.next();//通过get(key)方法找到value
String values = map.get(key);
System.out.println(key+"="+values);
}
System.out.println("============");//使用增强for循环
for(String key:set){//通过get(key)方法找到value
String v = map.get(key);
System.out.println(key+"="+v);
}
}
通过entrySet遍历map集合
实现步骤:
1.使用map集合中的entrySet(),把map集合中多个entry对象取出来,存储到一个set集合中
2.遍历set集合,获取每一个entry对象
3.通过entry对象中的getKey(),getValue()方法获取键与值
private static voidshow02() {
Map map=new HashMap<>();
map.put("xiangqi", "111");
map.put("xiangqi1", "222");
map.put("xiangqi2", "333");
map.put("xiangqi3", "444");//使用map集合的entrySet()方法,把map集合众多个Entry对象取出来存在set集合中
Set> set =map.entrySet();//遍历set集合,使用增强for循环
for(Map.Entry entry:set){
String key=entry.getKey();
String value=entry.getValue();
System.out.println(key+"="+value);
}
HashMap存储自定义类型键值(两种情况)
Map集合保证key是唯一的:
作为key的元素,必须重写hashCode方法和equals方法,以保证Key的唯一
情况1当:
key:String类型
value:Person类
String类本身重写了hashCode方法和equals方法,可以保证Key的唯一性
测试类:
private static voidshow03() {//创建hashMap集合
HashMap hashMap = new HashMap<>();//插入元素
hashMap.put("001", new Person("张三",20));
hashMap.put("002", new Person("里斯",21));
hashMap.put("003", new Person("王五",22));
hashMap.put("003", new Person("王五",23));//使用entry方法
Set> set =hashMap.entrySet();for(Map.Entry entry:set){
String key=entry.getKey();
Person value=entry.getValue();
System.out.println(key+"==>"+value);
}
情况2当:
key:Person类
value:String类型
为了保证key的唯一性,必须在person类中重写hashCode方法和equals方法
Person类:
package com.zhs.map;
import java.util.Objects;public classPerson {privateString name;privateInteger age;
@OverridepublicString toString() {return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}//重写的hashcode和equals方法
@Overridepublicboolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;
Person person=(Person) o;return Objects.equals(name, person.name) &&Objects.equals(age, person.age);
}
@Overridepublic inthashCode() {returnObjects.hash(name, age);
}publicPerson() {
}publicPerson(String name, Integer age) {this.name =name;this.age =age;
}publicString getName() {returnname;
}public voidsetName(String name) {this.name =name;
}publicInteger getAge() {returnage;
}public voidsetAge(Integer age) {this.age =age;
}
}
测试类:
private static voidshow03() {//创建hashMap集合
HashMap hashMap = new HashMap<>();//插入元素
hashMap.put( new Person("张三",20),"001");
hashMap.put(new Person("里斯",21),"002");
hashMap.put(new Person("王五",22),"003");
hashMap.put(new Person("王五",22),"004");//使用entry方法
Set> set =hashMap.entrySet();for(Map.Entry entry:set){
Person key=entry.getKey();
String value=entry.getValue();
System.out.println(key+"==>"+value);
}
结果:key重复时,后一个会替换前一个的结果
Person{name='张三', age=20}==>001Person{name='王五', age=22}==>004Person{name='里斯', age=21}==>002