java基础-泛型的优点
1、性能
对值类型使用非泛型集合类,在把值类型转换为引用类型,和把引用类型转换为值类型时,需要进行装箱和拆箱操作。装箱和拆箱的操作很容易实现,但是性能损失较大。假如使用泛型,就可以避免装箱和拆箱操作。
1 ArrayList list=new ArrayList();
2 list.Add(20); //装箱,list存放的是object类型元素,须将值类型转化为引用类型
3 int i=(int)list[0]; //拆箱,list[0]的类型是object,要赋值就得把引用类型转化为值类型
如果换成泛型编程,就不会有装箱和拆箱的性能损失。
1 List<T> list=new List<int>();
2 list.Add(20); //因为指定了用int来实例化,因此不必装箱
3 int i=list[0]; //同样地,访问时也不需要拆箱
2、类型安全
与ArrayList类一样,如果使用对象,可以在这个集合中添加任意类型。
如果使用非泛型编程,如下代码,就有可能在某些情况下会发生异常。

1 ArrayList list=new ArrayList();
2 list.Add(20);
3 list.Add("string");
4 list.Add(new MyClass());
5
6 foreach(int i in list)
7 {
8 Console.WriteLine(i); //这里会有个异常,因为并不是集合中的所有元素都可以转化为int
9 }

如果该用泛型编程,则可以避免这种异常,让编译器检查出错误。
1 List<int> list=new List<int>();
2 list.Add(20);
3 lsit.Add(”string”); //编译时报错,只能报整数类型添加到集合中
4 list.Add(new MyClass()); //同上 原文连接:https://www.cnblogs.com/blueGao/p/10220753.html
java基础-泛型的优点的更多相关文章
- 一天一个Java基础——泛型
这学期的新课——设计模式,由我仰慕已久的老师传授,可惜思维过快,第一节就被老师挑中上去敲代码,自此在心里烙下了阴影,都是Java基础欠下的债 这学期的新课——算法设计与分析,虽老师不爱与同学互动式的讲 ...
- Java 基础 -- 泛型、集合、IO、反射
package com.java.map.test; import java.util.ArrayList; import java.util.Collection; import java.util ...
- java基础-泛型举例详解
泛型 泛型是JDK5.0增加的新特性,泛型的本质是参数化类型,即所操作的数据类型被指定为一个参数.这种类型参数可以在类.接口.和方法的创建中,分别被称为泛型类.泛型接口.泛型方法. 一.认识泛型 在没 ...
- Java基础 - 泛型详解
2022-03-24 09:55:06 @GhostFace 泛型 什么是泛型? 来自博客 Java泛型这个特性是从JDK 1.5才开始加入的,因此为了兼容之前的版本,Java泛型的实现采取了&quo ...
- Java基础——泛型
一.定义 泛型(generic)是指参数化类型的能力.可以定义带泛型类型的类或方法,随后编译器会用具体的类型来替换它(泛型实例化).使用泛型的主要优点是能够在编译时,而不是在运行时检测出错误.它是jd ...
- java基础-泛型3
浏览以下内容前,请点击并阅读 声明 8 类型擦除 为实现泛型,java编译器进行如下操作进行类型擦除: 如果类型参数有限制则替换为限制的类型,如果没有则替换为Object类,变成普通的类,接口和方法. ...
- java基础 泛型
泛型的存在,是为了使用不确定的类型. 为什么有泛型? 1. 为了提高安全 2. 提高代码的重用率 (自动 装箱,拆箱功能) 一切好处看代码: package test1; import java.la ...
- java基础-泛型2
浏览以下内容前,请点击并阅读 声明 6 类型推测 java编译器能够检查所有的方法调用和对应的声明来决定类型的实参,即类型推测,类型的推测算法推测满足所有参数的最具体类型,如下例所示: //泛型方法的 ...
- java基础-泛型1
浏览以下内容前,请点击并阅读 声明 泛型的使用能使类型名称作为类或者接口定义中的参数,就像一般的参数一样,使得定义的类型通用性更强. 泛型的优势: 编译具有严格的类型检查 java编译器对于泛型代码的 ...
随机推荐
- bzoj 1369: [Baltic2003]Gem
确实是神2333333333,一开始以为是01染色sb题,然而被打脸... (蒟蒻不乱说,网上各种神犇的题解,还有图!!) #include <bits/stdc++.h> #define ...
- 如何在Windows系统下使用you-get下载网上的媒体资源
关于you-get的专业介绍可以点击这个链接:中文说明 1,首先你要在你的电脑上安装python环境 Windows系统下: 首先,你需要去官网下载相应的版本: 也可以下载我网盘里的(注意看好自己的电 ...
- 干货分享:Academic Essay写作套路详解
你想过如何中立的表达自己吗?大概只有10%不到的同学,会真正重视这个细节.但很多留学生能顺利写完作文已经不容易,还要注意什么中立不中立的.我知道这个标准,对许多同学有些过分,但很残酷的告诉你,这的确是 ...
- Git的http与ssh配置
http 进入git bash 直接clone所需项目 通过http方式 eg:git clone http://xxxxxxxxxx/bk_linux_inspect-master.git 会弹出提 ...
- Windows 2000 栈溢出 利用异常
当在一个函数(test)里面自定义了异常处理,如下: 那么在运行时,它会把自定义的异常处理函数MyExceptionhandler()的地址放入栈中(PUSH 004013CC) 然后把fs:[0]的 ...
- sudo 提权漏洞(CVE-2019-14287)复现 (10.16 第二十二天)
sudo是Linux系统命令,让普通账号以root身份去执行某些命令,比,安装软件.查看某些配置文件.关机.重启等操作,如果普通账号需要使用sudo需要修改配置文件/etc/sudoers,将sudo ...
- Windows操作系统安装JDK环境
Windows操作系统安装JDK环境 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. Java常见的术语 1>.什么是JVM 只要在需要运行Java应用程序的操作系统上 ...
- tensorflow-cnnn-mnist
#coding=utf-8import tensorflow as tfimport numpy as npimport matplotlib .pyplot as pltfrom tensorflo ...
- C++编程学习(三)运算符
一.运算符 1.求余运算双方必须是整数. 2.编程时一定要注意运算符的优先级!!!例如: int a=5,b=6,c=6,k; 3>4 //结果为假 a<b //结果为真 k= b!=c ...
- 刷题48. Rotate Image
一.题目说明 题目是48. Rotate Image,简而言之就是矩阵顺时针旋转90度.不允许使用额外的矩阵. 经过观察(写一个矩阵,多看几遍就知道了),旋转90度后: 第1行变为len-1列(最后一 ...