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;
		 = name;
	}
	public String toString()
	{
		return id+":::"+name;
	}
}

结果:

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