----------- android
培训、java培训、java学习型技术博客、期待与您交流! ---------
Map集合:
	是一个存储键值对的集合。数据不再是单个的了,而是必须由键和值组成。
	最大的一个特点:就是体现对应关系。
	常见问题:
		Map和Collection的区别?
		Map:
			是一个双列(键值对)集合。键必须是唯一的,值可以重复。可以看做是夫妻对。
		Collection:
			是一个单列集合。他的List儿子是可以存储重复元素的。而Set不可以存储重复元素(唯一性)。可以看做是单身汉集合。
Map集合的功能:
	A:添加
		V put(K key,V value);  给集合添加键值对。
				如果没有,就添加,返回null。
				如果有,就替换,返回替换之前的值。
								
	B:删除:
			void clear();   删除多有的键值对
			V remove(Object key);  根据给定的键删除对应的键值对。
								如果给定的键存在,就返回对应的值。
								如果给定的键不存在,返回null。
	C:判断
		boolean containsKey(Object key);  是否包含给定的键
		boolean containsValue(Object value);  是否包含给定的值
		boolean isEmpty();  是否为空
	D:获取
		Object get(Object key); 根据键返回对应的值。
		Set<K> keySet();  拿到所有的键。
		Collection<V> values(); 拿到所有的值。
		Set<Map.Entry<K,V>> entrySet(); 拿到所有的键值对。	
	E:长度
		int size();  获取长度。
			长度指的是多有的键值对的对数。
	注意事项:
		Map集合的具体实现类(HashMap,TreeMap)的数据结构,只针对键有效。
	Map集合的遍历方式:	
		第一种:丈夫找妻子(丈夫是键,妻子是值)  ---要求大家必须掌握
			1、把所有的丈夫(键)集中起来。其实就相当于获取到所有的键。  keySet();
			2、遍历所有的键。相当于拿到单个的丈夫。    增强for或者迭代器都可以。
			3、让丈夫去
找自己的妻子。相当于根据键去找值。 get(Object key)方法
		第二种:通过结婚证找丈夫和妻子。 --   要求大家
理解就可以了,能掌握的话,最好掌握
			1、我要拿到多有的结婚证。相当于,拿到所有的键值对。  Set<Map.Entry<K,V>> entrySet()
			2、遍历结婚证集合,拿到单个的结婚证。相当于通过遍历,拿到单个的键值对。  Map.Entry<K,V>
			3、通过结婚证来找对应的丈夫和妻子。相当于通过键值对来找里边的键和值。 getKey(),getValue();
		
		键值:String,String
			  String,Student
			  Student,String
需求:学生类做键,String类的学号做值。
		特有需求:如果学生的姓名和年龄一致,我就认为他是同一个。
		注意:保证键的唯一性。(在学生类里边重写
hashCode方法和equals方法)
		
使用TreeMap存储字符串的键值对(键值都是字符串类型),哪应该怎么添加,怎么遍历?
	1、创建键值对集合对象。
	2、向集合中添加数据。
	3、遍历。
		A:获取到所有的键。 getKey();
		B:用增强for来遍历键的集合。拿到每个键。
		C:根据获得到的键,来找对应的值。  get(Object key)
使用TreeMap存储
自定义对象(键:学生类,值:字符串)。如果我想实现排序,应该怎么办?
注意事项:
	如果自定义对象作为键的时候,使用TreeMap集合,就必须对元素进行排序。
	怎么排序?
		1、让自定义对象所属的类(Student类)去实现Comparable
接口,然后重写接口中的comapareTo()方法。
		2、使用带参构造,创建TreeMap集合对象。接收比较器接口Comaparator传过来的参数。(用匿名内部类的方式来做)
			
HashMap和Hashtable的区别?
	HashMap:
线程不安全的,效率高,允许null键和null值。
	Hashtable:
线程安全,效率低。不允许null键和null值。
有一个字符串:  "cbxzbvavdvgd"  要求获取字符串中,每一个字母出现次数:"a(1)b(2)c(1)d(2)g(1)v(3)x(1)z(1)"
	1、把字符串转成字符数组。   toCharArray();
	2、定义一个TreeMap集合,Character做键(代表字符),Integer做值(代表每个字符出现的次数)。
	3、遍历字符数组,然后获取到每一个字符。
	4、然后根据获取到的字母去TreeMap集合中找对应的值。  Object get(Object obj):根据键找值;
	5、如果第4步的返回值为null,就把该字母添加到集合中,次数记录为1.
		如果第4步的返回值不为null,就把次数++,然后重新存储该字符。
	6、把集合中的键值对按照我们的需求拼接成字符串。
		
    基础班,就业班
	基础班:
		01,zhangshang
		02,lisi
	就业班:
		03,wangwu
		04,zhaoliu
	思路:
		1、创建一个集合对象,键是字符串,值是HashMap集合(键和值都是字符串,键记录的是学生的学号,值记录的是学员的名字)。
		2、分别创建基础班集合,就业班集合。
		3、创建学员对象。
		3、把第三步创建的学员对象添加到对应的第二步创建的集合中。
		
	用HashMap的key来存预热班和就业班,用value的位置来存ArrayList集合, ArrayList集合中再来存Student对象.Student对象中再来存数据. 
	
	HashMap<String, ArrayList<Student>> hm = new HashMap<String, ArrayList<Student>>();
		
----------- android培训、java培训、java学习型技术博客、期待与您交流! ---------