泛型
jdk5.0新特性—泛型
1、泛型的概念:
问题:集合元素对类型没有限制,存入对象后它不记忆对象类型,取出对象时必须进行强制转换,容易出错,调试困难。
泛型:参数化类型,用参数指定元素的类型,限定类的操作数据的类型。即灵活,又确定。
2、使用泛型的基本语法:<类型1,类型2,…> ,在创建对象时使用。
类1或接口<类型实参> 对象名称=new 类2<类型实参>();
其中:“类2”可以是“类1”本身,还可以是“类1”的子类,也可以是接口的实现类。
类2的类型实参,必须与类1的类型实参相同。
例如:ArrayList<String> arrList=new ArrayList<String>();
List<String> list=new ArrayList<String>(); //list集合对象具有List接口的所有方法。
List<String> list=new LinkedList<String>(); //list集合对象具有List接口的所有方法,但不具有LinkedList特有的方法(与First和Last相关方法)。
Map<String,Integer> map=new HashMap<String,Integer>();
注意:(1)如果类2和类1相同,则创建的对象具有类2的所有属性和方法。
(2)如果类2是类1或接口的子类或实现类,创建的对象不具有类2自己添加属性和方法,只能使用类2继承的属性和方法。
3、在集合中使用泛型的好处
(1)使集合记住元素类型,取出元素时不再需要进行强制转换。
(2)指定了元素类型,就不能添加其他类型的元素,否则会报告语法错误。
(3)只要编译不出错,运行时也不会出错。
(4)泛型时程序更通用,代码更简洁(不需要强制转换),更加容易维护。
4、在定义接口、类中使用泛型:一般使用T、E、K、V等形式的参数表示形参。例如:Map<k,V>
5、类型统配符:使用<?>表示各种不同的类型,还有两种表示方式:
上限型:<? extends List>:表示继承自List接口的所有子类,即包含List接口的所有子接口和子类。
下限型:<? super HashSet>:表示HashSet类的所有父类和接口,Set接口,Collection接口。
6、Collections:集合工具类,提供了一些操作集合的静态方法。
(1)sort(List list); 元素从小到大排序。
(2)shuffle(List list); 打乱原有顺序随机排序;
(3)reverse(List list); 前后翻转
浙公网安备 33010602011771号