[19/03/23-星期六] 容器_ 泛型Generics
一、概念
生活中的容器不难理解,是用来容纳物体的,程序中的“容器”也有类似的功能,就是用来容纳和管理数据。
数组就是一种容器,可以在其中放置对象或基本类型数据。
---优势:是一种简单的线性序列,可以快速地访问数组元素,效率高。如果从效率和类型检查的角度讲,数组是最好的。
---劣势:不灵活。容量需要事先定义好,不能随着需求的变化而扩容。(因为数组容量是提前定义好的)
基于数组并不能满足我们对于“管理和组织数据的需求”,需要一种更强大、更灵活、容量随时可扩的容器来装载我们的对象,即容器也叫集合(Collection)
【容器的接口层次】Hash:哈希 ;Array:数组 linked:线性表 Map:存放键值对

【泛型】
泛型是JDK1.5以后增加的,它可以帮助我们建立类型安全的集合。在使用了泛型的集合中,遍历时不必进行强制类型转换。
JDK提供了支持泛型的编译器,将运行时的类型检查提前到了编译时执行,提高了代码可读性和安全性。
泛型的本质就是“数据类型的参数化”。 我们可以把“泛型”理解为数据类型的一个占位符(形式参数),即告诉编译器,在调用泛型时必须传入实际类型。
我们可以在类的声明处增加泛型列表,如:<T,E,V>,字符可以是任何标识符,一般采用这3个字母
【比喻】 容器:厨房一个大桶,放多种肉的混合,可以放但是拿出来某种肉得仔细找找看看
泛型:厨房放几个大桶,把肉分类,每种肉放一桶且各贴一种标签,方便拿出。而泛型就是这个标签。
【自定义泛型】
/*测试泛型
*Generics:一般的、普通的,无标签、无商标的 Object:目标、物体、对象
*
*/
package cn.sxt.collection; public class Test_0323_Generics {
public static void main(String[] args) {
MyCollection mc=new MyCollection();
mc.set("高老师", 0);
mc.set(200, 1);
System.out.println((String)mc.get(0)); //没有加泛型的情况,取对象内容需要强制转型 ,Object型转成String型
System.out.println((Integer)mc.get(1)); //加了泛型后注意区别 MyCollection2类中, <String>类似于实参对应于形参<E>, 第2个<String>在jdk1.7之后可以不写
MyCollection2<String> mc2=new MyCollection2<String>();
mc2.set("李老师", 0);//如果这样 mc2.set(200, 1);会报错 因为mc2中只能放字符型对象
System.out.println(mc2.get(0));//这里不用像上边一样强制转型了 因为通过设置编译器会自动检查 相当于把肉分类了贴好标签 }
}
//没加泛型的情况
class MyCollection{
Object objs[]=new Object[5]; public void set(Object obj,int index){
objs[index]=obj;
} public Object get(int index) {
return objs[index]; } }
//加了泛型(本质就是某种类型)的情况:可以在类的声明处增加泛型列表,如:<T,E,V> 字符可以是任何标识符,一般采用这3个字母。 类似形参
class MyCollection2 <E> {
Object objs[]=new Object[5]; public void set(E e,int index){
objs[index]=e;
} public E get(int index) {
return (E)objs[index]; } }
【好处】容器相关类都定义了泛型,在开发中使用容器类时都要使用泛型。这样,在容器的存储数据、读取数据时都避免了大量的类型判断,非常便捷。
通过阅读源码,我们发现Collection、List、Set、Map、Iterator接口都定义了泛型,因此,我们在使用这些接口及其实现类时,都要使用泛型。
强烈建议使用泛型。事实上,不使用编译器也不会报错!
接口的源码如下图所示:

[19/03/23-星期六] 容器_ 泛型Generics的更多相关文章
- [19/03/24-星期日] 容器_Collection(集合、容器)之List(表,有顺序可重复)
一. 概念&方法 Collection 表示一组对象,它是集中.收集的意思.Collection接口的两个子接口是List.Set接口. 由于List.Set是Collection的子接口,意 ...
- JAVA基础复习与总结<六> 数组_容器_泛型
数组的常用方法 java.util.Arrays 类能方便地操作数组,它提供的所有方法都是静态的. 具有以下功能: 给数组赋值:通过 fill 方法. 对数组排序:通过 sort 方法,按升序. 比较 ...
- CentOS 8.0 安装docker 报错:Problem: package docker-ce-3:19.03.4-3.el7.x86_64 requires containerd.io >= 1
1.错误内容 package docker-ce-3:19.03.2-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of th ...
- Centos8安装Docker提示:package docker-ce-3:19.03.8-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed
Centos8安装Docker提示:package docker-ce-3:19.03.8-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but ...
- 安装docker遇到:package docker-ce-3:19.03.8-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed
执行 yum install docker-ce docker-ce-cli containerd.io 提示: 错误: 问题: package docker-ce-3:19.03.8-3.el7.x ...
- deepin 15.11 升级docker-ce 18.01到19.03.1,升级docker compose 1.23到1.24.1
1.升级docker compose ,docker官方安装方法 $ sudo curl -L "https://github.com/docker/compose/releases/dow ...
- [RHEL8]安装Docker Problem: package docker-ce-3:19.03.6-3.el7.x86_64 requires containerd.io
系统环境 # cat /etc/redhat-release Red Hat Enterprise Linux release 8.0 (Ootpa) 安装依赖 # yum install -y yu ...
- fedora30平台安装docker 19.03
一,下载docker 1,说明:docker的打包对于fedora的支持很及时, 所以在fedora 30/31上都可以直接使用官方的rpm包 下载地址: https://download.docke ...
- docker19.03搭建私有容器仓库
一,启动docker后,搜索registry [root@localhost source]# systemctl start docker [root@localhost source]# dock ...
随机推荐
- sed命令——批量修改文件内容
批量替换单个文件内容 命令格式:sed -i 's/旧内容/新内容/g' 文件路径 sed -i 's/oldString/newString/g' file 例如:我想替换cwx.txt文件中的 j ...
- crontab -e
crontab -e可以配置定时任务 0 */3 * * * cd /root/find && nohup qbittorrent-nox --webui-port=7070 & ...
- linux安装PHP加速器eAccelerator
感慨下:做前端开发不少日子了,在前公司也使用过一段时间linux系统,对apache配置比较熟悉,可是对nginx配置还是不熟悉,毕竟自己是做前端开发的,大后端的事情还是比较排斥,以后多练习.前些日子 ...
- Windows 10 下彻底关闭 Hyper-V 服务
由于最近需要用到VMWare Workstation 安装虚拟机,安装完成后,发现任何64位的系统都不能正常安装.可能是Hyper-V与VMWare Workstation的冲突造成的不兼容,所以就去 ...
- Win10内置应用恢复初始状态
和Win8/Win8.1相同,Win10也内置了很多默认Windows应用,比如计算器.天气.人脉.Groove音乐.电影和电视.邮件和日历.Edge浏览器等.一般情况下,这些应用不会有太大的问题,但 ...
- nyoj 47——过河问题——————【贪心】
过河问题 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的 ...
- (四)selenium打开和关闭浏览器
一.Selenium简介 Selenium3.0主要变更特性: ①移除seleniumRC ②FireFox和Safari推出了自己的driver(geckodriver 和 Safaridriver ...
- SQL脚本整理系列一 表分区
表分区的目的: 1.把历史数据放到另外一个表里面 可以提高查询效率 当然如果经常查询历史数据和新数据的合并结果集这样做就大大的不好了 2.通过把一个表放到不同的文件,不同的文件再存储到不同的磁盘列阵中 ...
- hdu 1255 矩形覆盖面积(面积交)
http://www.cnblogs.com/scau20110726/archive/2013/04/14/3020998.html 面积交和面积并基本上差不多.在面积并里,len[]记录的是覆盖一 ...
- stark——pop功能(admin中添加功能)
一.pop功能需要实现的功能和问题 1.如何在一对多和多对多字段后渲染 +2.+对应的跳转路径是什么3.保存添加记录同时,将原页面的对应的下拉菜单中添加该记录 二.window.open()方法详解 ...