目录

1.什么是泛型

2.泛型写法

3. 特性


1.什么是泛型

什么是泛型

在讲解什么是泛型之前,我们先观察Java标准库提供的ArrayList,它可以看作“可变长度”的数组,因为用起来比数组更方便。

实际上ArrayList内部就是一个Object[]数组,配合存储一个当前分配的长度,就可以充当“可变数组”:

public class ArrayList {private Object[] array;private int size;public void add(Object e) {...}public void remove(int index) {...}public Object get(int index) {...}
}

如果用上述ArrayList存储String类型,会有这么几个缺点:

  • 需要强制转型;

  • 不方便,易出错。

Java泛型的重要目的:别让猫别站在狗队里

《Java编程思想》第四版足足用了75页来讲泛型——厚厚的一沓内容,很容易让人头大——但其实根本不用这么多,只需要一句话:我是一个泛型队列,狗可以站进来,猫也可以站进来,但最好不要既站猫,又站狗!

泛型,有人拆解这个词为“参数化类型”。这种拆解其实也不好理解,还是按照沉默王二的意思来理解一下吧。

现在有一只玻璃杯,你可以让它盛一杯白开水,也可以盛一杯二锅头——泛型的概念就在于此,制造这只杯子的时候没必要在说明书上定义死,指明它只能盛白开水而不能盛二锅头!

java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一

泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。

什么是泛型?为什么要使用泛型?

泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。

 泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。

2.泛型写法

为了不使编译器出现警告,需要前后都使用泛型,像这样:

List<Hero> genericheros = new ArrayList<Hero>();
不过JDK7提供了一个可以略微减少代码量的泛型简写方式

List<Hero> genericheros2 = new ArrayList<>();
后面的泛型可以用<>来代替,聊胜于无吧

package collection;import java.util.ArrayList;
import java.util.List;import charactor.Hero;public class TestCollection {public static void main(String[] args) {List<Hero> genericheros = new ArrayList<Hero>();List<Hero> genericheros2 = new ArrayList<>();}}

3. 特性

java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一

泛型只在编译阶段有效。

Java中的泛型,只在编译阶段有效。在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦出,并且在对象进入和离开方法的边界处添加类型检查和类型转换的方法。也就是说,泛型信息不会进入到运行时阶段。

对此总结成一句话:泛型类型在逻辑上看以看成是多个不同的类型,实际上都是相同的基本类型。

JAVA 中级 ARRAYLIST - ARRAYLIST上使用泛型相关推荐

  1. java map统计学生名单_Java含自己的总结:集合,学生,遍历,ArrayList,Set,Map,泛型,班级,发牌—诗书画唱...

    声明一个ArrayList,存储一条学生信息,内容为  1    张三   22    男,将信息进行遍历出来 package list; import java.util.ArrayList; im ...

  2. java面试要点---ArrayList list = new ArrayList(); 在这个泛型为Integer的ArrayList中存放一个String类型的对象。

    java面试要点---ArrayList list = new ArrayList(); 在这个泛型为Integer的ArrayList中存放一个String类型的对象. ArrayList list ...

  3. Java中级部分内容笔记 异常 I/O 集合框架 泛型 Lambda

    Java中级学习过程 参考的是所长的Java中级内容 1异常处理 1.1异常的定义 在我们打开文件的过程中,文件可能存在且被打开,也有可能不存在.在此时,Java会自动抛出一个异常,让我们必须去处理两 ...

  4. Java集合干货——ArrayList源码分析

    前言 在之前的文章中我们提到过ArrayList,ArrayList可以说是每一个学java的人使用最多最熟练的集合了,但是知其然不知其所以然.关于ArrayList的具体实现,一些基本的都也知道,譬 ...

  5. java 静态方法上的泛型

    靜態方法上的泛型 泛型也可以僅定義在靜態方法上,舉例而言,在 定義與使用泛型 中自定義過支援泛型的ArrayList,如果現在想寫個asArrayList方法,可指定不定長度引數,將之轉換為Array ...

  6. Java中使用ArrayList的10个示例–教程

    Java中的ArrayList是HashMap之后最常用的集合类. Java ArrayList表示一个可自动调整大小的数组,并用于代替数组. 由于创建数组后我们无法修改数组的大小,因此我们更喜欢在J ...

  7. 【Java 集合】ArrayList、LinkedList、Stack、Queue、Set、Map, 迭代器 Iterable、Iterator,Collections类

    集合类型 数组的局限性 ArrayList(常用方法 + 基本使用) ArrayList - retainAll ArrayList - toArray ArrayList 的遍历(5种) Array ...

  8. Java基础:ArrayList类和Arrays类

    ArrayList类 ArrayList类 ArrayList类的意义 ArrayList使用步骤 ArrayList类的常用方法 ArrayList如何存储基本数据类型 Arrays类 Arrays ...

  9. 第18天学习Java的笔记-ArrayList

    还有31天! 对象数组 package Demo1801;public class Person {private String name;private int age;public Person( ...

  10. Java集合之ArrayList

    ArrayList ArrayList是最常见以及每个Java开发者最熟悉的集合类了,顾名思义,ArrayList就是一个以数组形式实现的集合,以一张表格来看一下ArrayList里面有哪些基本的元素 ...

最新文章

  1. 用批处理查询电脑信息
  2. mbed列--基于飞思卡尔FRDM KL25Z鼠标设计的高速实现
  3. 蓝牙MESH网关_水哥智能教学视频一米家蓝牙mesh设备如何升级固件
  4. Redis之GEO存储地理位置信息
  5. C语言逗号表达式 - C语言零基础入门教程
  6. mysql多值存储过程_mysql使用存储过程回来多个值
  7. downie是什么软件?如何在Mac中下载视频?
  8. Java NumberFormat,DecimalFormat保存小数位数
  9. RoboMaster视觉教程(5)目标位置解算(通过像素点获取转角)
  10. 解决数字小键盘按shift+ 数字才可以使用的问题
  11. 实现输入月份号输出对应的英文月份
  12. vultr 安装docker
  13. 王者英雄胜率用计算机怎么算,王者荣耀征召局英雄胜率怎么计算
  14. 雅虎搜索的中文官方Blog推出
  15. readb(), readw(), readl(),writeb(), writew(), writel() 宏函数
  16. VVC帧内算法-PDPC
  17. OpenDDS开发人员指南中文版3.23(14)DDS Security安全性
  18. 小白都能看懂的实战教程 手把手教你Python Web全栈开发(DAY 1)
  19. php抓取网页内容,获取网页数据
  20. ftp爆破FunboxLunchbreaker

热门文章

  1. 计算机毕业设计Java电影售票系统(源码+系统+mysql数据库+lw文档)
  2. xxxiNetxxxxx2
  3. 图书馆下午四点关门,我深刻检讨
  4. 疫情下失业开发即时通讯软件(仿微信)-优化服务器端吞吐量
  5. 远程控制电脑的软件哪个比较好用
  6. rtx3050显卡什么水平 rtx3050显卡相当于GTX什么级别
  7. (原创)报考计算机博士之前应该注意的几个问题---写给应届硕士毕业生
  8. mysql修改database名_MySQL中修改database的名字
  9. 关于Rational Rose的使用(初学者)
  10. 丧尸的世界·《丧尸西游》