码迷,mamicode.com
首页 > 其他好文 > 详细

黑马程序员-----集合框架类(三) Map集合

时间:2015-06-15 15:50:05      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

黑马程序员-----集合框架类(三) Map集合

 

1.1 Map集合:该集合存储键值对。一对一对往里存。而且要保证键的唯一性。
1,添加。
put(K key, V value)
putAll(Map<? extends K,? extends V> m)

2,删除。
clear()
remove(Object key)

3,判断。
containsValue(Object value)
containsKey(Object key)
isEmpty()


4,获取。
get(Object key)
size()
values()

entrySet()
keySet()

Map
|--Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。jdk1.0.效率低。
|--HashMap:底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。将hashtable替代,jdk1.2.效率高。
|--TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。


和Set很像。
其实大家,Set底层就是使用了Map集合。

示例1:

 1 import java.util.*;
 2 class  MapDemo
 3 {
 4     public static void main(String[] args) 
 5     {
 6         Map<String,String> map = new HashMap<String,String>();
 7 
 8         //添加元素,如果出现添加相同的键时,那么后添加的值会覆盖原有键对应值。
 9         //并且put方法会返回被覆盖的值。
10         System.out.println("put:"+map.put("01","zhangsan1"));-->put:null
11         System.out.println("put:"+map.put("01","wangwu"));-->put:zhangsan1
12         map.put("02","zhangsan2");
13         map.put("03","zhangsan3");
14 
15         System.out.println("containsKey:"+map.containsKey("022"));-->containsKey:true
16         //System.out.println("remove:"+map.remove("02"));-->remove:zhangsan2//remove的时候会找02这个键并把它干掉,返回对应的值 
17 
18         System.out.println("get:"+map.get("023"));-->get:null
19 
20         map.put("04",null);
21         System.out.println("get:"+map.get("04"));-->get:null
22         //可以通过get方法的返回值来判断一个键是否存在。通过返回null来判断。
23 
24 
25         
26         //获取map集合中所有的值。
27         Collection<String> coll = map.values();
28 
29         System.out.println(coll);-->[null,wangwu,zhangsan2,zhangsan3]
30         System.out.println(map);--><04=null,01=wangwu,02=zhangsan2,03=zhangsan3>
31 
32 
33     }
34 }

 

1.2 map集合的两种取出方式(示例2):
1,Set<k> keySet:将map中所有的键存入到Set集合。因为set具备迭代器。
所有可以迭代方式取出所有的键,在根据get方法。获取每一个键对应的值。

Map集合的取出原理:将map集合转成set集合。在通过迭代器取出。

keySet图例:

技术分享


2,Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到了set集合中,
而这个关系的数据类型就是:Map.Entry

Entry其实就是Map中的一个static内部接口。
为什么要定义在内部呢?
因为只有有了Map集合,有了键值对,才会有键值的映射关系。
关系属于Map集合中的一个内部事物。
而且该事物在直接访问Map集合中的元素。

entrySet图例:

技术分享

示例2:

 1 import java.util.*;
 2 
 3 
 4 class MapDemo2 
 5 {
 6     public static void main(String[] args) 
 7     {
 8         Map<String,String> map = new HashMap<String,String>();
 9 
10         map.put("02","zhangsan2");
11         map.put("03","zhangsan3");
12         map.put("01","zhangsan1");
13         map.put("04","zhangsan4");
14 
15         //将Map集合中的映射关系取出。存入到Set集合中。
16         Set<Map.Entry<String,String>> entrySet = map.entrySet();
17 
18         Iterator<Map.Entry<String,String>> it = entrySet.iterator();
19 
20         while(it.hasNext())
21         {
22             Map.Entry<String,String> me = it.next();//返回类型为Map.Entry
23             String key = me.getKey();
24             String value = me.getValue();
25 
26             System.out.println(key+":"+value);-->04:zhangsan4
27                                  01:zhangsan1
28                                  02:zhangsan2
29                                  03:zhangsan3
30 
31         }
32 
33         /*
34         //先获取map集合的所有键的Set集合,用keySet()方法;
35         Set<String> keySet = map.keySet();
36 
37         //有了Set集合。就可以获取其迭代器。
38         Iterator<String> it = keySet.iterator();
39 
40         while(it.hasNext())
41         {
42             String key = it.next();
43             //有了键可以通过map集合的get方法获取其对应的值。
44             String value  = map.get(key);
45             System.out.println("key:"+key+",value:"+value);-->key:04,value:zhangsan4
46                                                     key:01,value:zhangsan1
47                                                     key:02,value:zhangsan2
48                                                     key:03,value:zhangsan3
49         }
50 
51         */
52 
53     }
54 }

 

PS:

Map.Entry 其实Entry也是一个接口,它是Map接口中的一个内部接口。

示例3:

 1 interface Map
 2 {
 3     public static interface Entry
 4     {
 5         public abstract Object getKey();
 6         public abstract Object getValue();
 7 
 8     }
 9 }
10 
11 class HashMap implements Map
12 {
13     class Hahs implements Map.Entry
14     {
15         public  Object getKey(){}
16         public  Object getValue(){}
17     }
18     
19 }

 

 

需求:(示例4)。

每一个学生都有对应的归属地。
学生Student,地址String。
学生属性:姓名,年龄。
注意:姓名和年龄相同的视为同一个学生。
保证学生的唯一性。

1,描述学生。

2,定义map容器。将学生作为键,地址作为值。存入。

3,获取map集合中的元素。

示例4:

 

 1 import java.util.*;
 2 class Student implements Comparable<Student>
 3 {
 4     private String name;
 5     private int age;
 6     Student(String name,int age)
 7     {
 8         this.name = name;
 9         this.age = age;
10     }
11     
12     public int compareTo(Student s)
13     {
14         int num = new Integer(this.age).compareTo(new Integer(s.age));
15 
16         if(num==0)
17             return this.name.compareTo(s.name);
18         return num;
19     }
20 
21     public int hashCode()
22     {
23         return name.hashCode()+age*34;
24     }
25     public boolean equals(Object obj)
26     {
27         if(!(obj instanceof Student))
28             throw new ClassCastException("类型不匹配");
29 
30         Student s = (Student)obj;
31 
32         return this.name.equals(s.name) && this.age==s.age;
33         
34 
35     }
36     public String getName()
37     {
38         return name;
39     }
40     public int getAge()
41     {
42         return age;
43     }
44     public String toString()
45     {
46         return name+":"+age;
47     }
48 }
49 
50 
51 
52 class  MapTest
53 {
54     public static void main(String[] args) 
55     {
56         HashMap<Student,String> hm = new HashMap<Student,String>();
57 
58         hm.put(new Student("lisi1",21),"beijing");
59         hm.put(new Student("lisi1",21),"tianjin");
60         hm.put(new Student("lisi2",22),"shanghai");
61         hm.put(new Student("lisi3",23),"nanjing");
62         hm.put(new Student("lisi4",24),"wuhan");
63 
64         //第一种取出方式 keySet
65 
66         Set<Student> keySet = hm.keySet();
67 
68         Iterator<Student> it = keySet.iterator();
69 
70         while(it.hasNext())
71         {
72             Student stu = it.next();
73             String addr = hm.get(stu);
74             System.out.println(stu+".."+addr);
75         }
76 
77 
78         //第二种取出方式 entrySet
79         Set<Map.Entry<Student,String>> entrySet = hm.entrySet();
80 
81         Iterator<Map.Entry<Student,String>> iter = entrySet.iterator();
82         
83         while(iter.hasNext())
84         {
85             Map.Entry<Student,String> me = iter.next();
86             Student stu = me.getKey();
87             String addr = me.getValue();
88             System.out.println(stu+"........."+addr);
89         }
90     }
91 }

 

黑马程序员-----集合框架类(三) Map集合

标签:

原文地址:http://www.cnblogs.com/jiandonn/p/4577141.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!