读容器源码要有目的,不能为了读源码而读源码
容器相关类型都定义了泛型,在开发和工作中使用容器类时都要使用泛型
泛型类在集合中的使用
public class Test{
public static void main(String[] args){
//以下代码中List、Set、Map、Iterator都是与容器相关的接口
List<String> list = new ArrayList<String>();
Set<Map> mans = new HashSet<Man>(); //Map是形参,所以有两个泛型
Map<Integer, Man> maps = new HashMap<Integer, Man>();
Iterator<Man> interator = mans.iterator();
}
}
package com.collection;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 测试容器+泛型
* @author Lucifer
*/
public class TestGeneric02 {
public static void main(String[] args) throws Exception {
MyCollection<String> mc = new MyCollection<String>(); //JDK1.7以后后面的构造器可以不加
mc.set("Lucifer",0); //没理解为什么要抛出异常???
String b = mc.get(0);
/*读List和ArrayList源码*/
List list = new ArrayList();
/*读Map源码*/
//实现类HashMap源码和类Map源码
Map map = new HashMap();
}
}
/*定义一个类*/
class MyCollection02<E>{
//加了泛型以后上面创建对象一环警告了---说明我们在建对象的时候后面要跟一个实际类型,在构造器后面也要加
/*定义一个object数组*/
Object[] objs = new Object[5];
/*封装往数组里面插入对象的方法*/
public void set(E e, int index) {
objs[index] = e;
}
/*
形参是:
对象
对应的索引下标
第一次这里的判断是index>0有问题,因为索引从0开始
通过"<>"添加泛型,里面可以写参数名---自定义泛型
一般情况使用的是T,E,V三个字母
*/
/*获得的方法*/
public E get(int index){
return (E) objs[index]; //又因为objs对象是Object类型,所以要强转一下
}
}