Java学习笔记29(集合框架三:泛型)
泛型的概念:
简单地讲,就是同一个方法(类),可以接受不同的数据类型并运行得到相对应的结果,不会出现安全问题
上一篇有一段这样的代码:
没有定义集合类型、迭代器类型
package demo; import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator; public class CollectionDemo {
public static void main(String[] args) {
//集合可以存储任意类型的对象
//集合中,不指定存储的数据类型,也可以存储
Collection c1 = new ArrayList();
c1.add("abc");
c1.add("def");
Iterator it1 = c1.iterator();
while(it1.hasNext()){
//it.next获取Object类型,强制转换
String s1 = (String)it1.next();
System.out.println(s1.length());
}
}
}
这里会有隐患:如果add(1);,自动装箱成Integer类型,无法转换成String,发生类型的转换异常
java中提出了泛型的概念,来解决这个问题:
package demo; import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator; public class GenericDemo {
public static void main(String[] args) {
function();
} public static void function(){
Collection<String> c1 = new ArrayList<String>();
c1.add("abc");
c1.add("def");
Iterator<String> it1 = c1.iterator();
while(it1.hasNext()){
String s1 = it1.next();
System.out.println(s1);
}
}
}
这时候如果add(1);,在编译的时候会无法通过,解决了安全问题
其实这里的泛型,是伪泛型,这里只是一个编译的手段,如果不是String类型,编译无法通过,否则编译成功
而编译后的class文件里面不存在泛型,但是由于编译过程中处理了类型问题,所以最后运行也是安全的
泛型的方法(了解即可,没有实际应用价值):
package demo;
import java.util.ArrayList;
public class GenericDemo {
public static void main(String[] args) {
ArrayList<Integer> array = new ArrayList<Integer>();
// ArrayList集合内有方法toArray泛型方法
array.add(123);
array.add(456);
Integer[] i = new Integer[(array.size())];
Integer[] j = array.toArray(i);
for (Integer k : j) {
System.out.println(k);
}
}
}
同样存在泛型的接口,泛型类等,目的都是为了解决安全问题并且方便使用者,并且带来了增强for循环
泛型的通配符?:
package demo; import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator; public class GenericDemo {
public static void main(String[] args) {
ArrayList<String> array = new ArrayList<String>();
array.add("abc");
array.add("def"); HashSet<Integer> set = new HashSet<Integer>();
set.add(123);
set.add(456); iterator(array);
iterator(set);
}
//要求定义一个方法,可以同时迭代两个集合
public static void iterator(Collection<?> c){
Iterator<?> it1 = c.iterator();
while(it1.hasNext()){
System.out.println(it1.next());
}
}
}
Java学习笔记29(集合框架三:泛型)的更多相关文章
- 【Java学习笔记】<集合框架>TreeSet,Comparable,Comparator
public class Person implements Comparable{ private String name; private int age; public Person(){ su ...
- 【Java学习笔记】<集合框架>定义功能去除ArrayList中的重复元素
import java.util.ArrayList; import java.util.Iterator; import cn.itcast.p1.bean.Person; public class ...
- 【Java学习笔记】<集合框架>对字符串进行长度排序
package 测试; import java.util.Comparator; public class ComparatorByLength implements Comparator { //定 ...
- Java学习笔记之---集合
Java学习笔记之---集合 (一)集合框架的体系结构 (二)List(列表) (1)特性 1.List中的元素是有序并且可以重复的,成为序列 2.List可以精确的控制每个元素的插入位置,并且可以删 ...
- Java学习笔记之集合
集合(Collection)(掌握) (1)集合的由来? 我们学习的是Java -- 面向对象 -- 操作很多对象 -- 存储 -- 容器(数组和StringBuffer) -- 数组而数组的长度固定 ...
- 【原】Java学习笔记026 - 集合
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 需求:从三国演义中 ...
- JavaSE 学习笔记之集合框架(十八)
集合框架:,用于存储数据的容器. 特点: 1:对象封装数据,对象多了也需要存储.集合用于存储对象. 2:对象的个数确定可以使用数组,但是不确定怎么办?可以用集合.因为集合是可变长度的. 集合和数组的区 ...
- java学习笔记之集合家族2
集合体系 一.数据结构 List集合储存数据结构 <1>堆栈结构 特点:先进后出 <2>队列结构 特点:先进先出 <3>数组结构 特点:查询快,增删慢 <4& ...
- Java基础学习笔记十七 集合框架(三)之Map
Map接口 通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同,如下图. Collection中的集合,元素是孤立存在的(理解为单身),向集合中存 ...
随机推荐
- sendmail报错Relaying denied
配置好sendmail后,使用php的mail()发送邮件,出现 SMTP server response: 550 5.7.1 Relaying denied. IP name lookup fai ...
- Java6及以上版本对synchronized的优化
目录 1.概述 2.实现同步的基础 3.实现方式 4.Java对象头(存储锁类型) 5.优化后synchronized锁的分类 6.锁的升级(进化) 6-1.偏向锁 6-2.轻量级锁 6-3.锁的比较 ...
- spring @transactional 注解事务
1.在spring配置文件中引入<tx:>命名空间 <beans xmlns="http://www.springframework.org/schema/beans&qu ...
- keil mdk5安装
- Django 的ORM 数据操作
from teatcher.models import Student 导入app(teatcher)下的模型(Student) In [11]: res = Student.objects ...
- AC自动机解题记录
1.HDU 2222 Keywords Search 模板题 #include <bits/stdc++.h> #define fir first #define sec second # ...
- Python练习-生成器、迭代器-2018.12.01
如果列表元素可以按照某种算法推算出来,可以在循环的过程中不断推算出后续的元素.这样就不必创建完整的list,从而节省大量的空间.在Python中,这种一边循环一边计算的机制,称为生成器:generat ...
- Python: 下载底层由Python2转Python3环境更新手记
谨记录运行环境改变过程中所碰到的坑. 下载底层运行环境由Python2移至Python3所遇到的问题及处理方法: 1.所引的第三方组件,基本都有替代支持:msvcr90.dll不再需要,有则报错2.引 ...
- Java14-java语法基础(十三)接口
Java14-java语法基础(十三)接口 一.接口 1.接口的作用 Java出于安全性.简化程序结构的考虑,不支持多继承而仅支持单继承.然而实际问题中很多情况下仅仅依靠单继承并不能将复杂的问题描述清 ...
- input type="file"多图片上传 原生html传递的数组集合
单个的input type="file"表单也是可以实现多图片上传的 代码如下: <form action="manypic.php" method=&q ...