java基礎--map集合遍歷方式
阿新 • • 發佈:2020-10-26
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