查看“Java集合与泛型”的源代码
←
Java集合与泛型
跳转至:
导航
,
搜索
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
==什么是泛型== 泛型就是定义一种模板,例如ArrayList<T>,然后在代码中为用到的类创建对应的ArrayList<类型>: ArrayList<String> strList = new ArrayList<String>(); 如下文中的Collection<String> books 就是应用了泛型。 <nowiki> import java.util.ArrayList; import java.util.Collection; public class TestForeach { public static void main(String[] args) { Collection<String> books = new ArrayList(); // 添加元素 books.add("Think in java"); books.add("java 讲义"); books.add("java 语言程序设计"); books.add("疯狂java讲义"); // 遍历集合 System.out.println("书库中的书籍有:"); for (Object book : books) { System.out.println((String) book); } } }</nowiki> ==为什么使用泛型== 如6.1.3.1节中程序所示,集合中保存的元素都是Object类型,这样会带来两个问题: *一是从集合中取出数据后,通常需要进行强制类型转换,如下所示: <nowiki>Collection books=new ArrayList(); books.add("Think in java"); books.add("java 讲义"); books.add("java 语言程序设计"); books.add("疯狂java讲义"); String book=(String)books.get(0);</nowiki> *二是没有错误检查,可以向集合中存入任何类型的数据。 books.add(5); 对于这个调用,编译和运行都不会出错。然而将get结果强制转换成Book类型时,会引发ClassCastException错误。 <nowiki>import java.util.List; import java.util.ArrayList; import java.util.Collection; public class TestForeach { public static void main(String[] args) { List arrayList = new ArrayList(); arrayList.add("aaaa"); arrayList.add(100); for(int i = 0; i< arrayList.size();i++){ String item = (String)arrayList.get(i); System.out.println("泛型测试"+"item = " + item); } } }</nowiki> 为了解决这种麻烦,JDK1.5中支持一项新特性--java泛型。 ==在集合中使用泛型== ===泛型的使用=== 基本语法: <nowiki>Collection<类型参数> 变量 = new ArrayList<> ();</nowiki> 例如: <nowiki>Collection<Interger> num=new ArrayList();</nowiki> <nowiki>Collection<Book> books=new ArrayList();</nowiki> 这里的Interger意指Java的包装类型。 下面程序演示了泛型在集合中的使用: <nowiki>public class TestGeneric { public static void main(String[] args) { // 定义集合时候使用泛型 Collection<String> books = new ArrayList(); books.add("Think in java"); books.add("java 讲义"); books.add("java 语言程序设计"); books.add("疯狂java讲义"); // 读取集合中的元素无需进行强制类型转换 for (String book : books) System.out.println(book); } }</nowiki> ===使用泛型的好处=== 当调用get方法的时候,不需要进行强制类型转换,编译器就知道返回类型是String,而不是Object: <nowiki>String book=books.get(0)</nowiki> 编译器还知道books集合中存储的是String类型数据,在编写代码时候会进行类型检查,避免插入错误对象。例如 <nowiki>books.add(5);</nowiki> 是无法通过编译的。 ===Java的包装类型=== Java是面向对象的编程语言,一切都是对象,但是为了编程的方便还是引入了基本数据类型,为了能够将这些基本数据类型当成对象操作,Java为每一个基本数据类型都引入了对应的包装类型(wrapper class),int的包装类就是Integer,从Java 5开始引入了自动装箱/拆箱机制,使得二者可以相互转换,对应如下: *原始类型:boolean,char,byte,short,int,long,float,double *包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double 顺便一提,Java中的基本数据类型只有以上8个,除了基本类型(primitive type),剩下的都是引用类型(reference type)。 ====练一练:用泛型的方法创建一个列表==== 返回 [[Java程序设计]]
返回至
Java集合与泛型
。
导航菜单
个人工具
登录
命名空间
页面
讨论
变种
视图
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
帮助
工具
链入页面
相关更改
特殊页面
页面信息