java基础--map集合遍历方式
Map集合的第一种遍历方式:通过键找值方式
Map集合中的方法:
set<K> keySet()返回此映射中包含的键的set视图。
实现步骤:
1.使用Map集合中的方法keySet(),把Map集合中所有的Key取出来,存储到一个set集合中
2.遍历set集合,获取map集合中每一个key
3.通过map方法get(key),通过key找到value
private static void show01() { Map<String,String> 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<String> set = map.keySet(); //遍历set集合获取每一个key //使用迭代器遍历set集合 Iterator<String> 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 void show02() { Map<String,String> 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<Map.Entry<String, String>> set = map.entrySet(); //遍历set集合,使用增强for循环 for(Map.Entry<String,String> 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 void show03() { //创建hashMap集合 HashMap<String, Person> 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<Map.Entry<String, Person>> set = hashMap.entrySet(); for(Map.Entry<String,Person> 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 class Person { private String name; private Integer age; @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } //重写的hashcode和equals方法 @Override public boolean 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); } @Override public int hashCode() { return Objects.hash(name, age); } public Person() { } public Person(String name, Integer age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
测试类:
private static void show03() { //创建hashMap集合 HashMap<Person,String> 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<Map.Entry< Person,String>> set = hashMap.entrySet(); for(Map.Entry<Person,String> entry:set){ Person key = entry.getKey(); String value = entry.getValue(); System.out.println(key+"==>"+value); }
结果:key重复时,后一个会替换前一个的结果
Person{name='张三', age=20}==>001
Person{name='王五', age=22}==>004
Person{name='里斯', age=21}==>002

浙公网安备 33010602011771号