List集合与泛型(详细篇) | 您所在的位置:网站首页 › 创建泛型数组的方法 › List集合与泛型(详细篇) |
一、泛型的概念 泛型就是类型参数化,处理的数据类型不是固定的,而是可以作为参数传入.
泛型的由来:由于早期使用Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况 ,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患.所以泛型因此而诞生.
如下声明了一个Student类的集合,引用了泛型.
List list = new ArrayList();
二、泛型的好处
1. 更好的安全性(将运行期的错误转变成编译期). 2. 更好的可读性 3. 省去强转类型的麻烦 语言和程序设计的一个重要目标是将bug尽量消灭在摇篮里,能消灭在写代码的时候,就不要等到代码写完,程序运行的时候. 代码写错的时候,开发环境和编译器不能帮我们发现问题,看代码: List list = new ArrayList(); Student stu = new Student(); stu.setSex("3"); stu.setUsername("zhangsan"); list.add(stu); list.add(true); list.add(123); Iterator it = list.iterator(); while (it.hasNext()) { Student stu = (Student)it.next();//向下转型获得Student对象 System.out.println(stu.getSex()+stu.getUsername()); } 看出问题了吗?写代码时,不小心,类型弄错了,不过,代码编译时是没有任何问题的,但,运行时,程序抛出了类型转换异常ClassCastException。 如果使用泛型,则不可能犯这个错误,如果这么写代码: List list = new ArrayList(); Student stu = new Student(); stu.setSex("3"); stu.setUsername("zhangsan"); list.add(stu); Iterator it = list.iterator(); while (it.hasNext()) { System.out.println(it.next()); }也就是说: 开发环境如Eclipse会提示你类型错误,即使没有好的开发环境,编译时,Java编译器也会提示你.这称之为类型安全,也就是说,通过使用泛型,开发环境和编译器能确保你不会用错类型,为你的程序多设置一道安全防护网.使用泛型,还可以省去繁琐的强制类型转换,再加上明确的类型信息,代码可读性也会更好. 三、泛型基本使用 中放的必须是引用数据类型,像自定义的类,包装类等等. 泛型集合中可以添加类和子类对象.一个集合泛型的基本使用: List list = new ArrayList();//创建一个String类型的泛型集合类 list.add("a"); list.add("b"); Iterator it = list.iterator();//获取指定泛型类的迭代器 while (it.hasNext()) { System.out.println(it.next()); } 四、泛型使用注意事项 前后泛型必须一致,或者后面的泛型可以省略不写.数组也要保证前后数据类型一致. //泛型 List list = new ArrayList();//必须一致 List list = new ArrayList();//或者不写(1.7jdk版本之后,棱形泛型) //数组 int[] arr = new int[5];//必须一致 //错误示范 List list = new ArrayList(); int[] arr = new byte[5]; 五、泛型方法 静态方法是随着类加载而加载的,那时对象还不一定被创建.
输出正常,元素已经删除 3、增强版for循环不能删除,因为底层依赖迭代器,只能使用list.remove,会出现并发修改异常. List list = new ArrayList(); list.add("1"); list.add("2"); list.add("1"); list.add("2"); for (String string : list) { System.out.println(string); list.remove(string); }1. 数组转集合(转换后不能进行增加操作,但可以调用集合里面的其它方法) //数组转集合 public static void sL() { // int[] arr = {11,22,33}; // List list = Arrays.asList(arr);//基本数据类型转换成集合时,保存的是地址 Integer[] arr = {11,22,33}; List list = Arrays.asList(arr);//引用类型转换成集合,保存的是元素 System.out.println(list); }2. 集合转数组 //集合转数组 public static void sArr() { ArrayList list = new ArrayList(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); String[] str = list.toArray(new String[1]);//这里的new String[]长度可以随意指定,大于集合长度将会出现null元素 for (String string : str) { System.out.println(string); } } 十二、集合嵌套集合的使用 //集合嵌套集合 public static void L() { List list = new ArrayList(); List str1 = new ArrayList(); str1.add("a"); str1.add("b"); List str2 = new ArrayList(); str1.add("a"); str1.add("b"); list.add(str1); list.add(str2); for (List string : list) {//迭代双层 for (String string2 : string) { System.out.println(string2); } } }注:本人再次学习集合与泛型做作的总结。可以供自己以后回顾,也可以供大家参考! |
CopyRight 2018-2019 实验室设备网 版权所有 |