1、为什么需要泛型
- 中药店每个抽屉有标签
- 超市每个瓶子有标签
集合容器类的设计阶段、声明阶段不能确定这个容器实际存的是什么类型的对象,所以在jkd1.5 以前只能把元素类型设计为Object,Jdk 1.5 以后使用泛型来解决。因为此时除了元素类型不确定,其他部分是确定的,例如关于这个元素如何保存,如何管理等是确定的,因此此时把元素的类型设计成一个参数,这个类型参数叫做泛型。
2、泛型的理解
允许在定义接口和类时通过一个一个标识表示类中某个属性的类型或者某个方法的返回值及参数类型。
3、代码查验学习
package com.test;
import org.junit.Test;
import java.util.*;
public class TestGenercity {
@Test
public void test1(){
//泛型不能是基本数据类型
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(89);
list.add(75);
list.add(88);
list.add(96);
//增强for循环遍历
System.out.println("增强for循环遍历:");
for (Integer sorce:list) {
//避免强制类型转换
int stuSorce = sorce;
System.out.println(stuSorce);
//System.out.println(sorce);
}
//迭代器遍历
System.out.println("迭代器遍历:");
//迭代器也有泛型
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
@Test
public void test2(){
//该接口声明的时候就有两个
Map<String, Integer> map = new HashMap<String, Integer>();
//要按类型来放
map.put("zhou", 25);
map.put("wang", 24);
map.put("Tom",78);
//泛型的嵌套
Set<Map.Entry<String, Integer>> entries = map.entrySet();
//HashMap 遍历的第二种办法
Iterator<Map.Entry<String, Integer>> iterator = entries.iterator();
while (iterator.hasNext()){
Map.Entry<String, Integer> next = iterator.next();
String key = next.getKey();
Integer value = next.getValue();
System.out.println(key+" "+value);
}
/**总结:
* 1、集合接口或类在jdk5.0时都修改为泛型
* 2、在实例化集合类型时指明泛型类型
* 3、其内部结构使用到类的泛型时只能按照声明的来
* 如上:list 只能add() int类型
*
*/
}
}
运行结果:
增强for循环遍历:
89
75
88
96
迭代器遍历:
89
75
88
96
Tom 78
wang 24
zhou 25