合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
## 自定义对象存储和遍历 HashMap允许存储null键,null值 , 但是只能存储一对 . ### 字符串作为key #### for循环 ~~~ HashMap<String, Person> map = new HashMap<String, Person>(); map.put("杭州", new Person("jack", 20)); map.put("北京", new Person("richard", 19)); map.put("无锡", new Person("milan", 18)); for (String key : map.keySet()) { Person value = map.get(key); System.out.println(key+":"+value); } ~~~ 结果 ~~~ 杭州:jack--20 无锡:milan--18 北京:richard--19 ~~~ #### entry ~~~ HashMap<String, Person> map = new HashMap<String, Person>(); map.put("杭州", new Person("jack", 20)); map.put("北京", new Person("richard", 19)); map.put("无锡", new Person("milan", 18)); Set<Map.Entry<String,Person>> set = map.entrySet(); Iterator<Map.Entry<String,Person>> it = set.iterator(); while(it.hasNext()){ Map.Entry<String,Person> entry = it.next(); System.out.println(entry.getKey()); System.out.println(entry.getValue()); } ~~~ ### 自定义对象为key **必须重写hashCode()和equals()方法** 才能保证对象的唯一性 . person类 ~~~ public class Person { public String name; public int age; public Person(String name, int age) { this.name = name; this.age = age; } public String toString() { return this.name + "--" + this.age; } public int hashCode() { return this.name.hashCode() + this.age * 2; //重写hashCode } public boolean equals(Object object) //重写equals { if (object == this) return true; if (!(object instanceof Person)) { return false; } Person person = (Person) object; return person.name.equals(this.name) && person.age == this.age; } } ~~~ ~~~ HashMap<Person, String> map = new HashMap<Person, String>(); map.put(new Person("jack", 18), "北京"); map.put(new Person("jack", 19), "无锡"); map.put(new Person("jack", 19), "杭州"); Set<Map.Entry<Person,String>> p = map.entrySet(); Iterator<Map.Entry<Person,String>> it = p.iterator(); while(it.hasNext()){ Map.Entry<Person,String> entry = it.next(); System.out.println(entry.getKey()); System.out.println(entry.getValue()); } ~~~ ~~~ jack--18 北京 jack--19 杭州 ~~~