泛型
来源:互联网 发布:淘宝虚拟类目直通车 编辑:程序博客网 时间:2024/06/05 05:17
JDK1.5之后出现的泛型机制
泛型出现的原因
泛型出现的好处:
1.将运行时期的问题classcastexception转到了编译时期
2.避免了强制转换的麻烦
泛型的书写格式
自定义泛型类
<>:什么时候用?当操作的引用数据类型不确定的时候,就使用<>。将要操作的额引用数据类型转入即可
其实<>就是一个用于接收具体引用数据类型的参数范围
在程序中,只要用到了带有<>的类或者接口,就要传入具体的引用数据类型
泛型技术是给编译器使用的技术,用于编译时期,确保了类型的安全
运行时,会将泛型去掉,生成的class文件中是不带泛型的,这个称为泛型的擦除
为什么擦除呢?因为为了兼容运行的类加载器
泛型的补偿:在运行时,通过获取元素的类型进行转换动作,不用使用者再强制转换了
============================================================
泛型类:在jdk1.5后,使用泛型来接收类中要操作的引用数据类型
泛型类:什么时候用?当类中的操作的引用数据类型不确定的时候,就使用泛型来表示
=============================================================
泛型方法:
当方法静态时,不能访问类上定义的泛型,如果静态方法使用泛型,只能将泛型定义在方法上
必须放在返回值类型的前面
==============================================================
泛型接口:
package cn.itcast.p4.generic.define.demo;public class GenericDefineDemo5 {/** * @param args */public static void main(String[] args) {InterImpl in = new InterImpl();in.show("abc");InterImpl2<Integer> in2 = new InterImpl2<Integer>();in2.show(5);}}//泛型接口,将泛型定义在接口上。 interface Inter<T>{public void show(T t);}class InterImpl2<Q> implements Inter<Q>{public void show(Q q){System.out.println("show :"+q);}}class InterImpl implements Inter<String>{public void show(String str){System.out.println("show :"+str);}}
泛型的通配符:? 未知类型
可以对类型进行限定:
? extends E:接收E类型或者E的子类型对象,上限,一般在存储元素的时候用,因为这样取出都是按照上限类型来运算的,不会出现安全隐患
? super E:接收E类型或者E类型的父类型,下限,通常对集合中的元素进行取出操作时,可以使用下限
========================================================================
集合的一些技巧:
需要唯一吗?
需要:set
需要制定顺序:
需要:TreeSet
不需要:HashSet
但是想要一个和存储一致的顺序(有序):LinkedHashSet
不需要:List
需要频繁增删吗?
需要:LinkedList
不需要:ArrayList
如何记录每一个容器的结构和所属体系呢?
看名字:
List:
ArrayList
LinkedList
Set:
HashSet
TreeSet
后缀名就是该集合所属的体系
前缀名就是该集合的数据结构
看到array:就要想到数组,就要想到查询快,有角标
看到link:就要想到链表,就要想到增删快,就要想到add get remove first last的方法
看到hash:就要想到hash表,就要想到唯一性,就要想到元素需要覆盖hashcode和equals方法
看到tree:就要想到二叉树,就要想到排序,就要想到comparable,comparator
而且通常这些常用的集合容器都是不同步的
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- 泛型
- [转载]ANSYS12.0安装教程
- 嵌入式 && 桌面类软件引导过程
- 让EFCore更疯狂些的扩展类库(二):查询缓存、分部sql、表名替换、遍历的策略配置
- Java赋值、运算符与类型转换
- windows访问虚拟机里的CentOS7中angular应用
- 泛型
- POJ 3191The Moronic Cowmpouter
- access json.jbuilder file in api
- Android之旅第三站——活动(Activity)的携带Bundle数据的跳转…
- hosts文件的作用
- javac不是内部或外部命令
- 334. Increasing Triplet Subsequence**
- 掌握 Ajax,第 4 部分: 利用 DOM 进行 Web 响应
- 记一次企业级爬虫系统升级改造(五):基于JieBaNet+Lucene.Net实现全文搜索