它保持ArrayList的大小(在内存中)非常小,并且是当你希望变量非空并且可以使用时的策略,但是不要期望立即填充List.如果您希望立即填充它,最好给它一个更大的初始值 – ArrayList的任何“增长”都在内部创建一个新的原始数组,并复制项目. ArrayList的增长很昂贵,应该最小化.

或者,如果您要创建一个类的实例,每个实例都包含其中一个List属性.如果你没有立即计划填充它们,你可以通过不分配房间来节省一些内存.

但是:有一种更好的方法:Collections.emptyList().通常,您需要直接保护对该列表的访问,并且(作为示例)您的类中提供在内部List上运行的特定于域的方法调用.例如,假设您有一个包含学生姓名列表的School类. (保持简单.)

public class School {

private List studentNames = Collections.emptyList();

public void addStudentName(String name) {

if (studentNames.isEmpty()) {

studentNames = new ArrayList();

}

studentNames.add(name);

}

public void removeStudentName(String name) {

studentNames.remove(name);

if (studentNames.isEmpty()) {

studentNames = Collections.emptyList(); // GC will deallocate the old List

}

}

}

如果您愿意进行isEmpty()检查并执行初始化/赋值,那么这是创建大量空ArrayList实例的更好选择,因为Collections.emptyList()是一个静态实例(只存在一个)而不是修改.

java arraylist优点_java – 创建初始容量为0的ArrayList的优点?相关推荐

  1. java容量_Java集合类初始容量、加载因子、扩容增量

    当底层实现涉及到扩容时,容器或重新分配一段更大的连续内存(如果是离散分配则不需要重新分配,离散分配都是插入新元素时动态分配内存),要将容器原来的数据全部复制到新的内存上,这无疑使效率大大降低. 加载因 ...

  2. java new数组_Java创建数组的几种方式

    1.一维数组的声明方式: type[] arrayName; 或 type arrayName[]; 附:推荐使用第一种格式,因为第一种格式具有更好的可读性,表示type[]是一种引用类型(数组)而不 ...

  3. java singleton 多线程_Java创建线程安全的单例singleton

    Java创建线程安全的单例 单例的使用场景 JVM中仅需要一个实例,因此能节省内存,加快访问速度,比如数据库连接池,计数器等.Spring 中的Bean,默认也是单例的,共享资源的访问,比如日志文件, ...

  4. java图表标题_Java 创建Excel图表

    import com.spire.xls.*; import com.spire.xls.charts.ChartSerie; import com.spire.xls.charts.ChartSer ...

  5. java删除表格_Java 创建、删除Word表格

    在Word文档中,我们可以通过添加表格的方式来帮助我们更加清晰.直观地分析和展示数据.本文将介绍如何使用Free Spire.Doc for Java组件来给Word文档创建表格,及删除文档中已有的表 ...

  6. java 雷达图_Java 创建Excel雷达图

    class="MsoNormal">本文介绍通过Java程序在Excel工作表中创建雷达图表的方法. 程序环境 Spire.Xls.jar 免费版本3.9.1 Jdk版本要求 ...

  7. java excel 编辑_Java 创建、编辑和删除Excel迷你图表

    在Excel中,迷你图表是指在单元格中表示数据的微型图表.用其可以清晰简明地表现出相邻数据的变化趋势,同时也不会占用大量空间.根据图表形式的不同,迷你图表可分为折线迷你图.柱状迷你图及盈亏迷你图.本文 ...

  8. java jxl使用_java创建excel示例(jxl使用方法)

    使用该API非Windows操作系统也可以通过纯Java应用来处理Excel数据表.因为是使用 Java编写的,所以我们在Web应用中可以通过JSP.Servlet来调用API实现对Excel数据表的 ...

  9. java动物类_Java创建动物类animal,以及其子类

    (1)创建动物类animal 具有属性体重 具有方法移动(move)和睡觉(sleep) 移动时输出"animal moving" 睡觉上输出"animal sleepp ...

最新文章

  1. 机器学习数据不平衡不均衡处理之SMOTE算法实现
  2. 链表问题7——判断一个链表是否为回文结构
  3. 一次 Java 内存泄漏的排查
  4. argmax最经典解释
  5. linux 源码搭建lnmp_Linux精华篇—CentOS 7.4下源码编译构建LNMP架构
  6. 【10】青龙面板之JD ck 获取的1种办法
  7. 程序员必备的代码审查(Code Review)清单
  8. 使用Base64进行string的加密和解密
  9. PhpYun人才系统 整合 Ucenter 之后,会员注册提示”该 Email 已经被注册!“的解决方案
  10. asp.net中使用excel类导出Excel文件,并导出到web客户端中遇到的问题
  11. 从MVC到前后端分离(REST-个人也认为是目前比较流行和比较好的方式)
  12. 【linux笔记】vi和vim编辑器,重定向输出,系统命令,进程,管道
  13. 客户端存储——Storage
  14. Semaphore(多资源多线程)
  15. FTP 通过cmd命令上传下载文件
  16. 服务器未能识别网络,服务器无法识别url中特殊字符的处理方式
  17. Element UI修改message控件显示的时间
  18. 如何用计算机设计衣服,怎样才能成为出色的服装设计师_电脑服装设计图怎么画...
  19. (crm笔记2-2)在前端页面输出后台查询出的表单数据
  20. 十五、商城 - 品牌管理-AngularJS(3)

热门文章

  1. 企业选择视频会议系统
  2. Uninstall ManyCam with WindowsUninstaller.Org Removal Tips
  3. 矩阵求导与投影梯度相关问题
  4. java项目-宿舍管理系统
  5. psql切换schema_关于PostgreSQL:如何在PSQL中切换数据库?
  6. 网络综合布线工程技术实训室解决方案(转载)
  7. win10电脑桌面透明便签_在win10系统的电脑桌面上使用便签贴方法!
  8. html提交提示非法字符串,教你如何过滤高亮显示非法字符
  9. 用深信服AC控制方位话机注册链路的开、关
  10. 本科生出来做机器学习,数据挖掘的工作会比研究生差很多吗?