package cooom;
import org.junit.Test;
import java.util.*;
/**
*
* 泛型的使用
* 1.jdk 5.0新增的特性
* 2.在集合中使用泛型:
* 总结:
* a.集合接口或集合类在jdk5.0是都修改为带泛型的结构
* b.在实例化集合类是,可以指明举例的泛型类型
* c.指明完以后,在集合类或接口中凡是定义类或接口时,内部结构(比如:方法,构造器属性等)使用到类的泛型的位置,
* 都指定为实例化时泛型的类型 比如add(E e)----- >实例化以后add(Integer e)
* d.注意点:泛型的类型必须是一个类,不能是基本数据类型,需要用到基本数据类型的时候用包装类替换
* e.如果实例化时没有指明泛型的类型,默认泛型为java.lang.Object类型
*
* @author 冀帅
* @date 2020/8/13-12:06
*/
public class GenericTest {
//在集合中使用泛型之前的情况:
@Test
public void test1(){
ArrayList list = new ArrayList();
//需求:存放学生的成绩
list.add(78);
list.add(76);
list.add(89);
list.add(88);
//问题一:类型不安全(没有限制存放数据的类型)
list.add("Tom");
for (Object score : list) {//取出来放到score里面
//问题二:强转时,可能出现类型转换异常(ClassCastException)。
int stuScore = (Integer) score;//Object转成Integer ,在自动拆箱
System.out.println(stuScore);//ClassCastException
}
}
//在集合中使用泛型的情况:以ArrayList为例
@Test
public void test2(){
//不能用int, 因为add()里是Object类型,int不属于。int默认值为0,Integer的默认值为NULL
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(78);
list.add(87);
list.add(99);
list.add(65);
// 在编译时就进行类型检查,保证数据安全
// list.add("Tom"); 编译错误
// 方式一遍历
// for (Integer score : list) {
// int stuScore = score;//不用再强转了
// System.out.println(stuScore);
//
// }
// 方式二遍历
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
//在集合中使用泛型的情况:以HashMap为例
@Test
public void test3(){
Map<String,Integer> map = new HashMap<String,Integer>();
map.put("Tom",87);
map.put("Jerry",87);
map.put("Jack",67);
// 遍历方式一:遍历键
// Set<String> set = map.keySet();
// Iterator<String> iterator = set.iterator();
// while (iterator.hasNext()){
// System.out.println(iterator.next());
// }
// 遍历方式二:遍历键和值
// Set<Map.Entry<String, Integer>> set = map.entrySet();
// Iterator<Map.Entry<String, Integer>> iterator = set.iterator();
// while (iterator.hasNext()){
// System.out.println(iterator.next());
// }
// 遍历方式三:遍历键和值
Set<String> set = map.keySet();
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()){
String key = iterator.next();//拿到键
Integer value = map.get(key);
System.out.println(key+"---"+value);
}
}
}