一、泛型(JDK1.5以后出现了泛型)泛型:用于解决安全问题是一个安全机制。

1、 泛型格式:通过<>来定义要操作的引用数据类型。

2、 好处:

(1)将运行时出现的ClassCastException转移到了编译时期。方便程序员解决问题,让运行时期问题减少,安全。

(2)避免了强制转换的麻烦。

3、在使用java提供的对象时,什么时候使用泛型呢?

通常在集合框架中很常见,只要见到<>就要定义泛型。其中<>就是用来接受类型的。当使用集合时,将集合中的要存储的类型作为参数传递到<>中即可。

例如:

 

class Demo{
	public  void show(T t)
	{
		System.out.println("show:"+t);
	}
	publicvoid print(Q q)
	{
		System.out.println("print:"+q);
	}
	public  staticvoid method(W t)
	{
		System.out.println("method:"+t);
	}
}
class GenericDemo4 
{
	public static void main(String[] args) 
	{
		Demod = new Demo();
		d.show("haha");
		//d.show(4);
		d.print(5);
		d.print("hehe");

		Demo.method("hahahahha");

		/*
		Demo d = new Demo();
		d.show("haha");
		d.show(new Integer(4));
		d.print("heihei");
		*/
		/*
		Demod = new Demo();

		d.show(new Integer(4));
		d.print("hah");

		Demod1 = new Demo();
		d1.print("haha");
		d1.show(5);
		*/
	}
}

《注意》静态方法不可以访问类上定义的泛型。如果静态方法操作的应用数据类型不确定,可以将泛型定义在方法上。
4、泛型限定:? 通配符。也可以理解为占位符。
? extends E: 可以接收E类型或者E的子类型。上限。
? super E: 可以接收E类型或者E的父类型。下限。

二、Map集合
Map集合:该集合存储键值对,一对一对往里存。且要保证键的唯一性。
1、常用的方法:
(1)添加:put(K key, V value) ;   putAll(Map
(2)删除:clear() ;remove(Object key)//返回对应的值
(3)判断:containsValue(Object value) ;containsKey(Object key) ;isEmpty()     返回的是boolean值。
(4)获取:get(Object key) ; size();   values()
(5)取出:entrySet() ;   keySet()
2、Map子类对象的特点
Map:|--Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。jdk1.0.效率低。
           |--HashMap:底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。将hashtable替代,jdk1.2.效率高。
           |--TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。
3、Map集合的两种取出方式
Map集合的取出原理:将map集合转成set集合。在通过迭代器取出。
(1)keySet:将map中所有的键存入到Set集合。因为set具备迭代器。所以可以迭代方式取出所有的键,在根据get方法。获取每一个键对应的值。

import java.util.*;
 class MapDemo2 
 {
 public static void main(String[] args) 
 {
 Map map = new HashMap(); 
 map.put("02","zhangsan2"); 
 map.put("03","zhangsan3"); 
 map.put("01","zhangsan1"); 
 map.put("04","zhangsan4"); //将Map集合中的映射关系取出。存入到Set集合中。 
 Set<map.entry> entrySet = map.entrySet(); 
 Iterator<map.entry> it = entrySet.iterator(); 
 while(it.hasNext()) { 
 Map.Entry me = it.next(); 
 String key = me.getKey();
 String value = me.getValue(); 
 System.out.println(key+":"+value);
 }

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

Set<map.entry> entrySet = map.entrySet(); 
 Iterator<map.entry> it = entrySet.iterator(); 
 while(it.hasNext()) { 
 Map.Entry me = it.next(); 
 String key = me.getKey(); 
 String value = me.getValue();
 System.out.println(key+":"+value);
 }
 /* //先获取map集合的所有键的Set集合,keySet(); 
 SetkeySet = map.keySet(); //有了Set集合。就可以获取其迭代器。 
 Iteratorit = keySet.iterator(); 
 while(it.hasNext()) { 
 String key = it.next(); //有了键可以通过map集合的get方法获取其对应的值。
 String value  = map.get(key); 
 System.out.println("key:"+key+",value:"+value); 
 } 
 */ 
 }
 }