在声明一个接口和类的时候可以使用尖括号带有一个或者多个参数但是当你在声明属于一个接口或者类的变量的时候或者你在创建一个类实例的时候需要提供他们的具体类型。我们来看下下面这个例子

List<String>words = new ArrayList<String>();
words.add("Hello ");
words.add("world!");
String s = words.get(0)+words.get(1);
assert s.equals("Hello world!");

  

  在集合框架中,ArrayList<E>实现了接口List<E>,上面这个简单的代码声明了包含了多个字符串列表的变量words,并且创建了一个ArrayList实例,把两个字符串添加到这个列表中,然后把他们取出来。在Java以前的泛型中,相同的代码会这样写:

List words = new ArrayList();
words.add("Hello ");
words.add("world!");
String s = ((String)words.get(0))+((String)words.get(1))
assert s.equals("Hello world!");

  

  如果没有泛型,参数类型会被忽略掉。但是在元素从列表中取出的时候你必须,明确的使用强制类型转换。实际上,从上面两种源文件编译后的字节码文件时完全一样的。我们说这是泛型擦除。因为List<Integer>,List<String>, and List<List<String>>等等这些类型在运行时都是相同的类型List。我们将从第一个程序到第二个程序的处理过程称为泛型擦除。术语擦除是有一点不准确,因为程序擦除了参数类型但是增加了强制转换。

  泛型隐式的使用了相同的强制转换而显示的表示没有使用泛型。如果这个转换失败,那么使用泛型写的代码就很难去调试了。因为下面的前置条件说以为什么说泛型是可靠的:
通过泛型编译加入的隐式转换永远不会失败。

  这个条件有很重要的一点是:对于编译器来说,它没有已发布的未检查的警告的时候这个才有效。稍后我们将在一定程度上讨论什么导致已发布的未检查的警告还有就是怎么样最小化他们的影响。通过泛型擦除实现的泛型有很多好处。它使事情变得简单,在这样的泛型中不会添加任何根本上讲新的东西;它使事情变得的小巧,准确来讲它只会有一个List的实现,而不是针对每个类型有一个版本;它擦除了过程,因为在相同的库中我们可以用泛型或者非泛型的形式去访问调用。最后一点是很值得好好的阐述的,你不会碰到令你不快的问题在你使用两种不同版本的类库时:使用1.4或者以前的遗留的非泛型版本,和一个使用版本5和6的泛型版本。在字节码层面,不适用泛型的代码和使用泛型的代码是一样的。没有必要立刻转向全部转泛成型---你可以升级你的代码通过每次只更新一个包一个类一个方式去开始使用泛型。我们甚至可以解析出你为遗留大代码声明的泛型类型。

  通过泛型擦除还有另外一个影响就是数组类型和参数化的类型在使用上是不一样的。运行new String[size] 将分配一个数组并且另外在这个数组中存储String类型的组件。作为对比,运行new ArrayList<String>()分配了一个列表,但是不另外存储列表的元素类型在这个列表中。在术语中,我们说Java具体化了数组元素的类型。但是没有具体化列表的元素类型。

很难去

Java泛型和集合之泛型介绍的更多相关文章

  1. Java基础之集合与泛型

    话不多说,直接上图 1.Collection集合小结 注意: 凡是使用哈希表保存对象的容器,保存的对象在容器中都是唯一的,唯一性是通过被保存对象的hashCode和equals方法共同确定: 凡是使用 ...

  2. Java泛型和集合之泛型VS模板

    Java的泛型很像C++中的模板,说到Java 泛型和C++中的模板的关系时,有两个重要的方面需要被考虑到:语法和语义.语法看起来是相似的,可是语义却明显是不同的. 在语法上讲,选择尖括号  是因为他 ...

  3. java基础(7)集合与泛型

    第一部分:Collection集合 1 collection集合概述 集合按照其存储结构可以分为两大类,分别是单列集合java.util.Collection和双列集合java.util.Map. C ...

  4. JAVA基础之集合、Iterator迭代器、泛型及增强for循环

    个人理解: 对于集合,首先要明确的是最顶层的接口是Collection接口类,其包含一些基本的方法以便子类调用,不过在定义的时候最好定义好数据类型,以免遍历时还得必须进行向上转型:特别注意的是其没有关 ...

  5. java基础(18):集合、Iterator迭代器、增强for循环、泛型

    1. 集合 1.1 集合介绍 集合,集合是java中提供的一种容器,可以用来存储多个数据. 在前面的学习中,我们知道数据多了,可以使用数组存放或者使用ArrayList集合进行存放数据.那么,集合和数 ...

  6. Java 集合和泛型

    一.集合(Collections) Java使用集合来组织和管理对象. 1.Java的集合类 集合类主要负责保存.盛装和管理对象,因此集合类也被称为容器类. 集合类分为Set.List.Map和Que ...

  7. Java集合之泛型的使用

    Java集合之泛型的使用 泛型提供了一种轻便灵活的数据操作,数据的安全性相对提高. 泛型提供了对列表元素的约束条件,比如ArrayList有序链表,可存储任意类型的元素. 此处构建一个ArrayLis ...

  8. Java中泛型在集合框架中的应用

    泛型是Java中的一个重要概念,上一篇文章我们说过,当元素存入集合时,集合会将元素转换为Object类型存储,当取出时也是按照Object取出的,所以用get方法取出时,我们会进行强制类型转换,并且通 ...

  9. Java基础知识强化之集合框架笔记30:集合之泛型的引入

    1. 泛型的引入: (1)首先我们看看下面这一段代码,如下: package cn.itcast_01; import java.util.ArrayList; import java.util.It ...

随机推荐

  1. 走向DBA[MSSQL篇] 从SQL语句的角度 提高数据库的访问性能

    原文:走向DBA[MSSQL篇] 从SQL语句的角度 提高数据库的访问性能 最近公司来一个非常虎的dba  10几年的经验 这里就称之为蔡老师吧 在征得我们蔡老同意的前提下  我们来分享一下蔡老给我们 ...

  2. Linux内核进程管理

    介绍: 在Linux的内核的五大组成模块中,进程管理模块时很重要的一部分.它尽管不像内存管理.虚拟文件系统等模块那样复杂.也不像进程间通信模块那样条理化,但作为五大内核模块之中的一个,进程管理对我们理 ...

  3. Android GPS获取当前经纬度坐标

    APP中可能会遇到一种需求,就是将当前所在位置的坐标传到server上,今天我提供三种途径去获取经纬度坐标信息,第一种是通过Android API来实现,另外一种通过百度地图API来实现,第三种通过天 ...

  4. SQL Server表分区详解

    原文:SQL Server表分区详解 什么是表分区 一般情况下,我们建立数据库表时,表数据都存放在一个文件里. 但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆 ...

  5. AsyncTask来源分析(一)

    于android开发过程AsyncTask我会经常处理它.在网上,也有很多的其描述,因此,这里是不是说的用法,直接写自己的学习经验,以及它的一些浅显的认识,忘记错批评. AsyncTask它是一个抽象 ...

  6. C#将image中的显示的图片转换成二进制

    原文:C#将image中的显示的图片转换成二进制 1.将Image图像文件存入到数据库中 我们知道数据库里的Image类型的数据是"二进制数据",因此必须将图像文件转换成字节数组才 ...

  7. C++内存分配和拷贝构造函数写研究

    昨晚参加笔试,开错题,有印象中的概念,但目前尚不清楚是怎么回事,什么原理,导致错误的话题.现在总结. 一.C++写内存分配研究 问题考察例如以下,请先不要看答案,看看你是否能做对,呵呵: waterm ...

  8. DFS-leetcode Combination Sum I/I I

    深度优先搜索(DFS)它是一个搜索算法.第一次接触DFS它应该是一个二进制树的遍历内部,二叉树预订.序和后序实际上属于深度遍历-first.在本质上,深度优先搜索,遍历中则看到了更纯正的深度优先搜索算 ...

  9. RQNOJ PID4 / 数列(位运算)

    题目描述 给定一个正整数k(3≤k≤15),把所有k的方幂及所有有限个互不相等的k的方幂之和构成一个递增的序列,例如,当k=3时,这个序列是: 1,3,4,9,10,12,13,… (该序列实际上就是 ...

  10. BZOJ 1004 HNOI2008 Cards Burnside引理

    标题效果:特定n张卡m换人,编号寻求等价类 数据保证这m换人加上置换群置换后本身构成 BZOJ坑爹0.0 条件不那么重要出来尼玛怎么做 Burnside引理--昨晚为了做这题硬啃了一晚上白书0.0 都 ...