标签:
黑马程序员-----集合框架类(三) 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 }
标签:
原文地址:http://www.cnblogs.com/jiandonn/p/4577141.html