java--Map

来源:互联网 发布:yy协议软件 编辑:程序博客网 时间:2024/05/16 17:35

Map 

Map 提供了一个更通用的元素存储方法。Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。从概念上而言,您可以将 List 看作是具有数值键的 Map。而实际上,除了 List 和 Map 都在定义 java.util 中外,两者并没有直接的联系。

map集合中存放就是映射关系。当数据之间存在这映射关系时,就要先想map集合。

Map集合:该集合存储键值对。一对一对往里存。而且要保证键的唯一性。
1,添加。
put(K key, V value) :添加元素,如果出现添加时,相同的键。那么后添加的值会覆盖原有键对应值。并put方法会返回被覆盖的值。
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() :获取map集合中所有的值。

keySet()
entrySet() 
map集合的两种取出方式:
1,Set<k> keySet:将map中所有的键存入到Set集合。因为set具备迭代器。所有可以迭代方式取出所有的键,在根据get方法。获取每一个键对应的值。
Map集合的取出原理:将map集合转成set集合。再通过迭代器取出。
2,Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到了set集合中,而这个关系的数据类型就是:Map.Entry
Map.Entry 其实Entry也是一个接口,它是Map接口中的一个内部接口。Entry其实就是Map中的一个static内部接口。
为什么要定义在内部呢?
因为只有有了Map集合,有了键值对,才会有键值的映射关系。关系属于Map集合中的一个内部事物。而且该事物在直接访问Map集合中的元素。
Map
|--Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。jdk1.0.效率低。
|--HashMap:底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。将hashtable替代,jdk1.2.效率高。
|--TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。

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

示例:

import java.util.*;class  Test{public static void main(String[] args) {System.out.println("----------------");Map<String,String> map=new HashMap<String,String>();System.out.println(map.put("01", "zhangsan01"));System.out.println(map.put("01", "zhangsan001"));map.put("02", "zhangsan02");map.put("03", "zhangsan03");System.out.println("map:"+map);System.out.println("map.containsKey(\"02\"):"+map.containsKey("02"));System.out.println("map.containsKey(\"09\"):"+map.containsKey("09"));System.out.println("map.containsValue(\"zhangsan03\"):"+map.containsValue("zhangsan03"));System.out.println("map.remove(\"02\"):"+map.remove("02"));System.out.println("map:"+map);System.out.println("map.get(\"03\")"+map.get("03"));System.out.println("----------------");map.put(null, "zhangsanNull");map.put("04", null);System.out.println("map.get(null)"+map.get(null));System.out.println("map.get(\"04\")"+map.get("04"));System.out.println("map:"+map);Collection<String> c=map.values();System.out.println("collection c:"+c);System.out.println("-----keySet-----");Set<String> s=map.keySet();System.out.println("keySet s:"+s);Iterator<String> it=s.iterator();while(it.hasNext()){String key=it.next();String value=map.get(key);System.out.println("key:"+key+"  value:"+value);}System.out.println("----entrySet----");Set<Map.Entry<String,String>> e=map.entrySet();Iterator<Map.Entry<String,String>> t=e.iterator();while(t.hasNext()){Map.Entry<String,String> me=t.next();System.out.println("key:"+me.getKey()+"  value:"+me.getValue());}}}
结果:

null
zhangsan01
map:{01=zhangsan001, 02=zhangsan02, 03=zhangsan03}
map.containsKey("02"):true
map.containsKey("09"):false
map.containsValue("zhangsan03"):true
map.remove("02"):zhangsan02
map:{01=zhangsan001, 03=zhangsan03}
map.get("03")zhangsan03
----------------
map.get(null)zhangsanNull
map.get("04")null
map:{null=zhangsanNull, 04=null, 01=zhangsan001, 03=zhangsan03}
collection c:[zhangsanNull, null, zhangsan001, zhangsan03]
-----keySet-----
keySet s:[null, 04, 01, 03]
key:null  value:zhangsanNull
key:04  value:null
key:01  value:zhangsan001
key:03  value:zhangsan03
----entrySet----
key:null  value:zhangsanNull
key:04  value:null
key:01  value:zhangsan001
key:03  value:zhangsan03


map扩展:

import java.util.*;public class Test {public static void main(String[] args) {HashMap<String,List<Student>> czbk = new HashMap<String,List<Student>>();List<Student> reyu = new ArrayList<Student>();List<Student> jiuye = new ArrayList<Student>();czbk.put("yureban",reyu);czbk.put("jiuyeban",jiuye);reyu.add(new Student("01","zhagnsa"));reyu.add(new Student("04","wangwu"));jiuye.add(new Student("01","zhouqi"));jiuye.add(new Student("02","zhaoli"));Iterator<String> it = czbk.keySet().iterator();while(it.hasNext()){String roomName = it.next();List<Student> room = czbk.get(roomName);System.out.println(roomName);getInfos(room);}}public static void getInfos(List<Student> list){Iterator<Student> it = list.iterator();while(it.hasNext()){Student s = it.next();System.out.println(s);}}}class Student{private String id;private String name;Student(String id,String name){this.id = id;this.name = name;}public String toString(){return id+":::"+name;}}
结果:

jiuyeban
01:::zhouqi
02:::zhaoli
yureban
01:::zhagnsa
04:::wangwu


0 0