HashMap儲存自定義資料結構方法
阿新 • • 發佈:2020-11-23
在使用HashMap儲存自定義資料時,需要注意的就是如果作為key的元素沒有Hashcode,equal方法時,那麼將無法保證key是唯一不重複的。
未重寫兩個函式
import java.util.HashMap; import java.util.Map; import java.util.Set; public class nbmap { /*map儲存自定義資料型別 * 保證key是唯一的! * 作為key的元素,必須重寫hashcode和equal方法*/ public static void main(String[] args) { show1(); } private static void show1() { /*使用person作為key,必須重寫hashcode和equal方法*/ HashMap<Person,String> k1=new HashMap<>(); k1.put(new Person("a",18),"nb"); k1.put(new Person("b",20),"sb"); k1.put(new Person("c",19),"wdnmd"); k1.put(new Person("a",18),"nb"); Set<Map.Entry<Person,String>> set=k1.entrySet(); for(Map.Entry<Person,String> i :set){ System.out.println(i.getKey()+"="+i.getValue()); } } }
此時person類並沒有去重寫那兩個函式
執行結果:(出現了key重複的情況)
重寫兩個函式
利用idea的補充程式碼快捷鍵(無腦next)
執行結果:(無重複key元素)
Person類程式碼(全靠idea的程式碼補充。)
import java.util.Objects; public class Person { private String name; private int age; public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Person person = (Person) o; return age == person.age && Objects.equals(name, person.name); } @Override public int hashCode() { return Objects.hash(name, 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 String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } }