考虑第6条的简单堆栈实现:

public class Stack {pprivate Object[] elements;private int size = 0;private static final int DEFAULT_INITAL_CAPACITY = 16;public Stack() {elements = new Object[DEFAULT_INITAL_CAPACITY];}public void push(Object e) {ensureCapacity();elements[size++] = e;}public Object pop() {if(size == 0) {throw new EmptyStackException();}Object result = elements[--size];elements[size] = null;return result;}public boolean isEmpty() {return size == 0;}private void ensureCapacity() {if(elements.length == size)elements = Arrays.copyOf(elements, 2 * size + 1);}
}

将该类泛型化可以提高类型的安全性,方便客户端使用(无需显式强制转换类型)

首先用类型参数替换所有的Object类型:

public class Stack<E> {pprivate E[] elements;private int size = 0;private static final int DEFAULT_INITAL_CAPACITY = 16;public Stack() {elements = new E[DEFAULT_INITAL_CAPACITY];}public void push(E e) {ensureCapacity();elements[size++] = e;}public E pop() {if(size == 0) {throw new EmptyStackException();}E result = elements[--size];elements[size] = null;return result;}public boolean isEmpty() {return size == 0;}private void ensureCapacity() {if(elements.length == size)elements = Arrays.copyOf(elements, 2 * size + 1);}
}

由于不能创建不可具体化类型的数组,所有有错误(new E[DEFAULT)INITIAL_CAP]是不允许的)

解决方法:

1.创建一个Object数组,并将它转换成泛型数组类型:

elements = (E[]) new Object[DEFAULT_INITIAL_CAPACITY];

错误变成一条警告,因为可以保证类型安全,所以可以用SupressWarning注释忽略掉该警告。

2.将elements域的类型从E[]改为Object[]:

private Object[] elements;

E result = (E) elements[--size];

产生一条警告,因为可以保证类型安全,所以所以可以用SupressWarning注释忽略掉该警告。

实际中选择第二种方法较多,因为pop方法经常会被调用,频繁地类型转换会耗费时间。

在25条中,鼓励优先使用列表而非数组。实际上并不总能在泛型中使用列表。为了提高性能,列表不是Java提供的基本实现,如ArrayList就需要在数组上实现,而某些类,如HashMap为了提高性能,也在数组上实现。

转载于:https://www.cnblogs.com/13jhzeng/p/5722102.html

第26条:优先考虑泛型相关推荐

  1. matlab中float类型的_Java局部变量类型推断(Var类型)的26条细则

    原文链接:https://dzone.com/articles/var-work-in-progress 作者:Anghel Leonard 译者:沈歌 Java局部变量类型推断(LVTI),简称 v ...

  2. 如何写出清晰又优雅的Python代码?我们给你这26条建议

    来源:大数据DT本文约1900字,建议阅读5分钟PEP 8非常详细地描述了如何编写清晰的Python代码. [ 导读 ] Python Enhancement Proposal #8叫作PEP 8,它 ...

  3. Yoshua Bengio等大神传授:26条深度学习经验

    Yoshua Bengio等大神传授:26条深度学习经验 发表于2015-09-17 08:21| 13482次阅读| 来源Marek Rei| 29 条评论| 作者Marek Rei 深度学习Pyt ...

  4. 26条C++的经典语录,哪几句戳中你的心!

    2019年悄悄的已经过了三分之二,C++你了解了多少?随着互联网的发展,c++作为底层语言的龙头老大,是时候站出来了! 如何学好C++,老夫我利用平生所学,整理出26条C++经典语录,希望能帮助到每一 ...

  5. 融创中国孙宏斌:创业24年,我总结了26条管理经验

    https://www.toutiao.com/a6715770412472467979/ 作者|孙宏斌 来源环球经理人 孙宏斌,融创中国董事长,中国房地产界争议人物.他25岁成为联想接班人,26岁蒙 ...

  6. 转载+手敲《一位26岁哈佛硕士生的26条成长感悟》

    哈佛硕士生Leo在他的26岁写下了26条成长感悟,读来总是收益,很是接地气,越来越感觉大道理总是最简单的话,很朴实的话语,是我们生活中挂在嘴边的那写念叨,可能耳熟能详的麻木了最终被忽略,遂自己手敲记录 ...

  7. 做网站的一些定律 原理和效应汇总(26条)

    做网站的一些定律 原理和效应汇总(26条) 做网站符合人类发现的些许定律和原理,也体现了一些著名的效应,请看: 1.250定律 拉德认为:每一位顾客身后,大体有250名亲朋好友.如果您赢得了一位顾客的 ...

  8. 最最常用的26条Linus命令整理

    最最常用的25条Linus命令整理 文件和目录 1.cd /home 进目录 2.cd .. 回上一级目录 3.cd -回上一次所在目录 4.pwd 显示工作路径 5.ls 查看目录中的文件 6.ls ...

  9. 26条MySQL性能优化的最佳经验

    今天,数据库操作越来越成为应用的性能瓶颈. 对于Web应用尤其明显. 关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情. 当我们去设计数据库表结构.查询表数据时,都 ...

  10. linux 26,Linux常用26条命令

    1. cd 切换目录 cd path 切换至当前目录下的path目录 cd .. 返回上一级目录 cd / 切换至根目录 cd /usr 切换至根目录下的usr目录 2. ls 显示当前目录内容 ls ...

最新文章

  1. C++:多线程中的小白(1)基础概念
  2. linux之LAMP架构优化
  3. STM32 USB转串口驱动安装不成功出现黄色感叹号解决方法!
  4. [转]HDR渲染器的实现(基于OpenGL)
  5. 【死磕Java并发】—–深入分析synchronized的实现原理
  6. matlab模拟gpd,如何用ARMA模型预测中国GDP
  7. 为已创建好的临时表添加字段列
  8. Oracle从软件安装到运行的全流程
  9. 第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(昆明) AC(带悔贪心)
  10. Pytorch之Variable与tensor--它封装了Tensor,并整合了反向传播的相关实现,像装糖果(糖果就是数据即tensor)的盒子
  11. 微模式重金招聘高级图像算法工程师
  12. 全球硬科技开发者大会(成都)开幕 蓝光发展等超300名开发者「乘风」数字升级...
  13. 关于信道利用率的总结与一道习题的最终解释
  14. Linux基础知识以及常见面试问题
  15. GET 请求参数过大导致HTTP错误码 414 / 500 的问题
  16. version magic 不一致问题
  17. 萨达撒 这篇 Java 基础,我吹不动了
  18. 显示器偏色测试软件,显示器偏色,如何解决显示器偏色?
  19. 赶紧用微信查询一下你的身份证,是否有人盗用你信息!
  20. 基金指数温度怎么算_10分钟学会计算指数温度,挑选指数基金

热门文章

  1. drupal.behavior 和 document.ready 没有直接的关系
  2. spring+mybatis 事务管理,配置都正确,但是回滚不了
  3. Centos 6让SVN提交文件自动更新到nginx的WEB目录
  4. hdu2108 判断是凸多边形还是凹多边形
  5. Verilog 常规数据定义
  6. 使用Github pages+jekyll搭建自己的博客(windows版)
  7. [LeetCode]129. Sum Root to Leaf Numbers路径数字求和
  8. linux下MySQL安装及设置
  9. Delphi 与 DirectX 之 DelphiX(91): TDIB.DrawMono();
  10. 公众号内打开提示404_200元500元/篇 | 她家小酒馆儿公众号征稿!(三天内审核、有额外稿费)...