JAVA的泛型 && JAVA的几种for循环方式
2013-01-06 22:05
417 查看
泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。可以把类型参数看作是使用参数化类型时指定的类型的一个占位符。
在没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。 泛型的好处是在编译的时候检查类型安全,并且所有的转换都是隐式的。
(1)泛型的规则
A,泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。
B,同一种泛型可以对应多个版本(因为参数类型是不确定的)。
C,泛型的类型参数可以有多个。
(2)两个实例。前者没用泛型,后者有用泛型
运行结果是:
T real type:java.lang.Integer
value = 88
--------------------------
T real type:java.lang.String
value = hello gen!
下面程序的运行结果也是上面一样。
=============================================================================================
在Java程序中,要“逐一处理”――或者说,“遍历”――某一个数组或Collection中的元素的时候,一般会使用一个for循环来实现。
(1)遍历数组的传统方式
(2)iterator方式
或者
List(列表)集合中的对象按照索引的位置排序,可以有重复的对象,允许按照对象在集合中的索引位置检索对象,List与数组有些相似。
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Map <String,String> map = new HashMap<String,String>();
map.put("1", "星期一");
map.put("2", "星期二");
map.put("3", "星期三");
map.put("4", "星期四");
map.put("5", "星期五");
map.put("6", "星期六");
map.put("7", "星期日");
Set<String> keys = map.keySet();
Iterator<String> it = keys.iterator();
while(it.hasNext())
{
String key = it.next();
String value =map.get(key);
System.out.println(key+" "+value);
}
}
} Map(映射):集合中的每一个元素包含一对键对象和值对象,集合中没有重复的键对象,值对象可以重复。结果是
2 星期二
1 星期一
7 星期日
6 星期六
5 星期五
4 星期四
(3)而在Java语言的J2SE 1.5版本之后,引入了另一种形式的for循环。借助这种形式的for循环,现在可以用一种更简单地方式来进行遍历的工作。Java的第二种for循环基本是这样的格式: for (循环变量类型 循环变量名称 : 要被遍历的对象) 循环体
借助这种语法,遍历一个数组的操作就可以采取这样的写法:
参考原文:http://baike.baidu.com/view/1436058.htm
参考原文:http://www.jb51.net/article/35884.htm
参考原文:http://blog.csdn.net/sun_abc/article/details/5906765
在没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。 泛型的好处是在编译的时候检查类型安全,并且所有的转换都是隐式的。
(1)泛型的规则
A,泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。
B,同一种泛型可以对应多个版本(因为参数类型是不确定的)。
C,泛型的类型参数可以有多个。
(2)两个实例。前者没用泛型,后者有用泛型
class Gen2{ private Object ob; //用Object实现参数类型任意化 public Gen2(Object ob){ this.ob = ob; } public Object getOb(){ return ob; } public void setOb(Object ob){ this.ob = ob; } public void showType(){ System.out.println("T real type:"+ob.getClass().getName()); //输出参数类型的类型名字 } } public class TestNew { public static void main(String[] args) { // TODO Auto-generated method stub Gen2 intOb = new Gen2(new Integer(88)); intOb.showType(); int i = (Integer)intOb.getOb(); System.out.println("value = "+i); System.out.println("--------------------------"); Gen2 strOb = new Gen2("hello gen!"); strOb.showType(); String s = (String)strOb.getOb(); System.out.println("value = "+s); } }
运行结果是:
T real type:java.lang.Integer
value = 88
--------------------------
T real type:java.lang.String
value = hello gen!
下面程序的运行结果也是上面一样。
class Gen<T>{ //泛型数据类型T private T ob; //数据类型做参数 public Gen(T ob){ this.ob = ob; } public T getOb(){ return ob; } public void setOb(T ob){ this.ob = ob; } public void showType(){ System.out.println("T real type:"+ob.getClass().getName()); } } public class TestNew { public static void main(String[] args) { // TODO Auto-generated method stub Gen<Integer> intOb = new Gen<Integer>(88); //不用知道预先要转化的类型,两边一致就行 intOb.showType(); int i = intOb.getOb(); System.out.println("value = "+i); System.out.println("--------------------------"); Gen<String> strOb = new Gen<String>("hello gen!"); strOb.showType(); String s = strOb.getOb(); System.out.println("value = "+s); } }
=============================================================================================
在Java程序中,要“逐一处理”――或者说,“遍历”――某一个数组或Collection中的元素的时候,一般会使用一个for循环来实现。
(1)遍历数组的传统方式
int[] integers = {1,2,3,4}; for(int j=0;j<integers.length;j++){ int i = integers[j]; System.out.println(i);
(2)iterator方式
import java.util.Collection; import java.util.Iterator; public class TestNew { public static void main(String[] args) { // TODO Auto-generated method stub /* 建立一个Collection */ String[] strings = {"A", "B","C","D"}; Collection stringList = java.util.Arrays.asList(strings); /* 开始遍历 */ for (Iterator itr = stringList.iterator(); itr.hasNext();) { Object str = itr.next(); System.out.println(str); } } }
或者
import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class main { public static void main(String[] args) { List<Integer> list = new ArrayList<Integer>(); list.add(new Integer(6)); list.add(new Integer(9)); list.add(new Integer(3)); list.add(new Integer(5)); list.add(new Integer(6)); Iterator<Integer> it = list.iterator(); while(it.hasNext()){ System.out.println(it.next()); } } }
List(列表)集合中的对象按照索引的位置排序,可以有重复的对象,允许按照对象在集合中的索引位置检索对象,List与数组有些相似。
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Map <String,String> map = new HashMap<String,String>();
map.put("1", "星期一");
map.put("2", "星期二");
map.put("3", "星期三");
map.put("4", "星期四");
map.put("5", "星期五");
map.put("6", "星期六");
map.put("7", "星期日");
Set<String> keys = map.keySet();
Iterator<String> it = keys.iterator();
while(it.hasNext())
{
String key = it.next();
String value =map.get(key);
System.out.println(key+" "+value);
}
}
} Map(映射):集合中的每一个元素包含一对键对象和值对象,集合中没有重复的键对象,值对象可以重复。结果是
2 星期二
1 星期一
7 星期日
6 星期六
5 星期五
4 星期四
(3)而在Java语言的J2SE 1.5版本之后,引入了另一种形式的for循环。借助这种形式的for循环,现在可以用一种更简单地方式来进行遍历的工作。Java的第二种for循环基本是这样的格式: for (循环变量类型 循环变量名称 : 要被遍历的对象) 循环体
借助这种语法,遍历一个数组的操作就可以采取这样的写法:
public static void main(String[] args) { int[] integers = {4,5,6,7}; for (int i : integers) { System.out.println(i); } }这里所用的for循环,会在编译期间被看成是这样的形式:
for (int 变量名甲 = 0; 变量名甲 < integers.length; 变量名甲++) { System.out.println(integers[变量名甲]); }(4)对应的,而遍历一个Collection的操作也有简单写法,不详说
参考原文:http://baike.baidu.com/view/1436058.htm
参考原文:http://www.jb51.net/article/35884.htm
参考原文:http://blog.csdn.net/sun_abc/article/details/5906765
相关文章推荐
- java for的几种循环方式
- Java for循环几种写法整理
- Java 集合 ArrayList和LinkedList的几种循环遍历方式及性能对比分析 [ 转载 ]
- List元素的几种for循环方式及其点评
- List元素的几种for循环方式及其点评
- (转)java for循环的执行顺序和几种常用写法
- Java for循环的几种用法分析
- 【转载】java&nbsp;for&nbsp;的几种用法
- java关于for,foreach,iterator循环ArrayList的方式测试
- Java中的几种for循环形式
- java for循环的几种写法
- Java "for" 的遍历方式
- Java循环for, while和do...while & Java决策制定
- [Java学习笔记]增强for循环和Map的两种读取方式
- Java里面for循环的几种用法
- Java学习日记(九)Collection、泛型、Map集合、Collections&Arrays、增强for语句、可变参数、静态导入
- java中不用break跳出for循环的方式
- Java之for循环优化方式-
- Java Map的几种循环方式学习总结
- Java for循环的几种用法