Java基础总结--泛型总结
-----泛型------JDK1.5出现的机制
1.泛型出现的原因--简化书写,提高安全性
技术的由来是为了解决问题,现在存在该问题,所有的容器定义类型为Object,所以任何对
象均可以放入容器--进行自动向上转型,要将容器的元素拿出来并使用该对象的特有内容时
候--进行强制的向下转型,但是假如进去的对象不是同种类型,强制就会失败--复用降低
早期处理方式:程序员主观控制--不能保证其他人的正确使用
后期处理方式:跟数组的思想一致,在声明的时候指定装入对象的类型,此后只能装该类型
的对象,否则编译就错误---泛型(避免后期安全)
2.泛型的好处
* 将运行时期的安全隐患转化到编译时期
* 遍历取出元素使用之前不用强转类型--直接就是该对象本身,可以直接使用
* 还能提供很多的设计上的便捷
3----什么时候使用---
*当接收的引用的类型不确定的时候使用,指定好类型,直接传入对象的引用,相当于指定了
要接收参数的范围
* 在程序中用到了含有<>的类/接口,就要明确传入的引用的具体类型
* 引用--是类的对象/接口子类对象的引用(E-类/接口)
注意小细节---泛型擦除----
泛型--编译时期的技术(给编译器使用的技术),用于编译时期,确保类型安全,并运行时候
会将泛型去掉,生成的class文件中不带泛型,这个称为泛型的擦除
关于泛型擦除的原因:主要为了兼容以前类加载器,其次在编译期间已经保证类型安全,所
以擦除也没有安全风险
---泛型补偿机制---在类装载器上加一个补偿机制,装载器获取对象的实际类型判断和转化
(getClass()-class),自动的做出强转--而不是程序员自己做强转,所以取出的元素可以直
接的使用
4.泛型的书写格式--java强类型语言,类型不匹配就编译不通过
容器类<对象类型> 容器对象引用 = new 容器类<对象类型>();
ArrayList<String> al = new ArrayList<String>();
6.不同情况下的泛型的使用--在集合框架里面应用最多
---自定义泛型类(没有泛型的时候使用Object-多态实现提高代码复用,存在运行安全隐患)
使用时机:当类中操作的引用类型不确定的时候使用泛型表示
好处:就是在使用对象的特有内容时候不需要进行强转,直接使用,具有更高的安全性,把
问题控制在编译期间
---泛型方法---可以传入任意对象并调用该方法
将泛型定义在方法上面(使用Object也可以实现,两种形式没有大差别)
eg public <W> void show(W w){语句;}
泛型方法注意:
当方法静态的时候不能访问类上定义的泛型,如果静态方法要使用泛型,就将泛型定义在方
法上eg public static <W> void show(W w){语句;}
泛型方法接收的对象,不能使用对象特有的东西,只能使用从Object继承的方法
---泛型接口---
定义一个泛型接口,具体子类实现接口的时候可以指定具体类型/继续使用泛型,指到创建对
象的时候再指定也可以eg:public interface List<E>extends Collection<E>
---泛型上限及体现---
泛型的通配符--?等价于? extends Object未知道的类型--没有返回值
eg:public static void printCollection(Collection<?> coll){语句}
这个也可以使用泛型方法实现--可以对返回值进行操作
eg:public static<T> T void printCollection(Collection<T> coll){语句}
泛型的限定-上限:?extends Person:接收Person以及Person的子类 <= E
元素出来接收用其父类Person接收
eg:public static void printCollection(Collection<? extends Person> coll){语句}
泛型上限的应用:集合里面存储元素时候--存储E及其子类对象的引用
(因为都是按照上限类型运算,不会出现安全隐患。应用较多)
----泛型下限及体现----用的不多
泛型的限定-下限:?super E 接收E类型或其父类类型 >=E
TreeSet(Comparator<? super E> comparator) 比较器对特定元素的排序
泛型下限的应用:对集合中的元素进行取出来的操作
比较器进行比较的时候,要取出元素比较,因为是父类,所以一定可以接收子类对象
---集合框架的查阅技巧---
需要唯一吗:Set
需要唯一+排序 TreeSet
需要唯一+和输入顺序一致LinkedHashSet
----前提不需要唯一List
1.经常增删LinkedList
2.不需要ArrayList
后缀代表所在的集合所属体系,前缀表示集合代表的数据结构
看到Array--联系数组适合查询
看到Link--联系链表适合增删
看到Hash--联系哈希表,唯一性,hashCode()&equals()
看到Tree--联系二叉树,排序,Comparable+Comparator
常见的容器一般都是非线程安全的
Java基础总结--泛型总结的更多相关文章
- 黑马程序员:Java基础总结----泛型(高级)
黑马程序员:Java基础总结 泛型(高级) ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 泛型(高级) 泛型是提供给javac编译器使用的,可以限定集合中的输入类型 ...
- 黑马程序员——JAVA基础之泛型和通配符
------- android培训.java培训.期待与您交流! ---------- 泛型: JDK1.5版本以后出现新特性.用于解决安全问题,是一个类型安全机制. 泛型好处: ...
- Java基础知识--泛型
什么是泛型?为什么使用泛型? 泛型,就是参数化类型.提到参数,最熟悉的就是定义方法时候的形参,然后调用此方法时传递实参.顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也 ...
- Java基础:泛型
Java的泛型是什么呢, 就是类型的參数化,这得类型包含方法參数和返回值.也就是原本该是确定类型的地方换成了变量,把类型的确定时间向后延迟了. 在之前,学过"重载"的概念,重载是什 ...
- 【Java基础】泛型
Num1:请不要在新代码中使用原生类型 泛型类和接口统称为泛型.每种泛型定义一组参数化的类型,构成格式是:类或接口名称,接着用<>把对应于泛型形式类型的参数的实际参数列表括起来.比如:Li ...
- 黑马程序员——【Java基础】——泛型、Utilities工具类、其他对象API
---------- android培训.java培训.期待与您交流! ---------- 一.泛型 (一)泛型概述 1.泛型:JDK1.5版本以后出现的新特性,用于解决安全问题,是一个类型安全机制 ...
- Java基础之泛型——使用二叉树进行排序(TryBinaryTree)
控制台程序. 1.实现针对容器类的基于集合的循环 为了让容器类类型的对象能够在基于集合的for循环中可用,类必须并且只需要满足一个要求——必须实现泛型接口java.lang.Iterable<& ...
- java基础之 泛型
泛型(Generic type 或者generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法 ...
- Java基础 Day14 泛型
//为什么要使用泛型 //1.解决元素存储的安全性的问题 //2.解决获取元素时,须要类型转换的问题 //未使用泛型 package org.tizen.test; import java.util. ...
- 【Java基础】泛型的一些总结
什么是泛型 泛型其实可以理解为一种广泛的类型,啥类型都型,当然,这种泛是指定义时可以广泛,但是使用时必须确定类型.也就是说,当不清楚未来使用哪种类型时,定义为泛型.可以支持泛型类,泛型接口,泛型方法, ...
随机推荐
- Junit4学习(四)Junit4常用注解
一,背景知识: 由前面的知识可以知道: /* * @Test:将一个普通方法修饰为一个测试方法 * @Test(exception=XXX.class) * @Test ...
- 关于SVM数学细节逻辑的个人理解(三) :SMO算法理解
第三部分:SMO算法的个人理解 接下来的这部分我觉得是最难理解的?而且计算也是最难得,就是SMO算法. SMO算法就是帮助我们求解: s.t. 这个优化问题的. 虽然这个优化问题只剩下了α这一个变 ...
- 数据库Mysql的安装及操作---数据引擎
一.1.什么是数据 描述事物的符号记录称为数据. 2.什么是数据库 存放数据的仓库,只不过这个仓库在计算机上存储设备上. 二.Mysql的介绍 ...
- 【译】The Accidental DBA:Troubleshooting Performance
最近重新翻看The Accidental DBA,将Troubleshooting Performance部分稍作整理,方便以后查阅.此篇是Part 2Part 1:The Accidental DB ...
- CSDN博客新手使用方案
CSDN博客简易使用 在CSDN上写博客,总是遇到很多问题,虽然这些问题很简单,但是对于新手来说,缺经常遇到,因此写篇博客记载. 一.CSDN的博客如何上传图片 如果有现成 ...
- StringBuffer的添加与删除功能
StringBuffer的添加功能A* public StringBuffer append(String str): * 可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身 B* pu ...
- JS(三)
上周介绍了JS中两个比较重要的东西,循环和函数,这周再给大家介绍一下BOM和DOM 一.BOM 1.首先来说一下什么是BOM,BOM即浏览器对象模型,说白一点就是与浏览器进行的交互的对象模型. 2.B ...
- [js高手之路] html5 canvas系列教程 - 开始路径beginPath与关闭路径closePath详解
路径在canvas绘图中,经常被用到,是一个非常重要的概念. 比如:我们要在canvas画出3条直线,要求用不同的颜色加以区分. <style> body { background: #0 ...
- AngularJS概念概述和第一个使用例子
点击查看AngularJS系列目录 转载请注明出处:http://www.cnblogs.com/leosx/ 概念概述 本节使用一个简单的例子简要介绍了AngularJS的重要组成部分. 概念 描述 ...
- JAVA HashMap 解析
1.简介(其实是HashMap注释的大致翻译) 本文基于JDK1.8,与JDK1.7中的HashMap有一些区别,看官注意区别. HashMap实现了Map接口,提供了高效的Key-Value访问.H ...