1)Map接口
关系:Map(接口)
HashMap(非抽象子类)、TreeMap(非抽象子类)
在开发中,Map集合的内容多用来查询,全部输出的操作较少;而Collection接口在开发中的主要作用就是用来传递内容及输出的。
2)
1 import java.util.HashMap; 2 import java.util.Map; 3 4 public class HashMapDemo01 { 5 6 public static void main(String[] args) { 7 Map<String,String> map = null; 8 map = new HashMap<String,String>(); //利用HashMap实例化Map 9 10 map.put("mldn", "www.mldn.cn"); 11 map.put("zhangsan", "www.zhangsan.cn"); 12 map.put("lisi", "lisi"); 13 String val = map.get("zhangsan"); 14 15 System.out.print("取出的内容是:"+val); 16 } 17 }
3)
排序子类TreeMap
按key进行排序。
Map接口中的内容不能直接使用迭代输出因为每个位置存放都是一对值
4)
1 import java.util.Iterator; 2 import java.util.Map; 3 import java.util.Set; 4 import java.util.TreeMap; 5 6 public class TreeMapDemo01 { 7 8 public static void main(String[] args) { 9 Map<String,String> map = null; 10 map = new TreeMap<String,String>(); 11 map.put("b", "www.b.cn"); 12 map.put("a", "wwww.a.cn"); 13 map.put("c", "www.c.cn"); 14 15 Set<String> keys = map.keySet(); 16 Iterator it = keys.iterator(); 17 18 while(it.hasNext()){ 19 String str = (String) it.next(); 20 System.out.println(str + "……" + map.get(str)); 21 } 22 } 23 }
5)Map输出的最标准操作流程:
1 import java.util.HashMap; 2 import java.util.Iterator; 3 import java.util.Map; 4 import java.util.Set; 5 6 public class IteratorDemo04 { 7 8 public static void main(String[] args) { 9 Map<String, String> map = null; 10 11 map = new HashMap<String, String>(); 12 map.put("zhangsan", "www.zhangsan.cn"); 13 map.put("lisi", "www.lisi.cn"); 14 Set<Map.Entry<String, String>> allSet = null; 15 allSet = map.entrySet(); 16 Iterator<Map.Entry<String, String>> iter = null; 17 iter = allSet.iterator(); 18 while(iter.hasNext()){ 19 Map.Entry<String, String> me = iter.next(); 20 System.out.println(me.getKey() + "……" + me.getValue()); 21 } 22 } 23 }
6)非系统类直接作为key:
和在HashSet中存储非系统类一样,必须在自定义类中覆写Object类的hashCode()、
equals()和toString()方法,之后便能和使用系统类(如String类)那样,可以通过匿名对象找到相应的value。
1 import java.util.HashMap; 2 import java.util.Map; 3 4 class Person{ 5 private String name; 6 private int age; 7 public Person(String name, int age){ 8 this.name = name; 9 this.age = age; 10 } 11 public boolean equals(Object obj){ 12 if(this == obj){ 13 return true; 14 } 15 if(!(obj instanceof Person)){ 16 return false; 17 } 18 Person p = (Person) obj; 19 if(this.name.equals(p.name)&&(this.age ==p.age)){ 20 return true; 21 }else{ 22 return false; 23 } 24 } 25 public int hashCode(){ 26 return this.name.hashCode() * this.age; 27 } 28 public String toString(){ 29 return this.name + "……" + this.age; 30 } 31 } 32 33 public class HashMapDemo08 { 34 35 public static void main(String[] args) { 36 Map<Person, String> map = null; 37 map = new HashMap<Person, String>(); 38 Person per = new Person("张三", 30); 39 map.put(per, "zhangsan"); 40 System.out.println(map.get(per)); 41 } 42 43 }
HashMap类和TreeMap类中的key不能重复,如果重复就会被覆盖。
而IdentityHashMap类中,key可以重复, 只要两个对象的地址不同即可。
原文:http://www.cnblogs.com/XuGuobao/p/7260683.html