首页 > 编程语言 >Java:为什么容器接口中定义的clear()方法具体实现要遍历每个元素并将其设置为null,而不是直接设置size=0?

Java:为什么容器接口中定义的clear()方法具体实现要遍历每个元素并将其设置为null,而不是直接设置size=0?

时间:2024-12-22 19:57:58浏览次数:5  
标签:容器 遍历 Java clear 元素 设置 null size

以ArrayList为例,其clear()的具体实现为遍历每一个元素,并将其设置为null。

public void clear() {
    modCount++;
    final Object[] es = elementData;
    for (int to = size, i = size = 0; i < to; i++)
        es[i] = null;
}

笔者作为初学者,很难不产生疑惑,为什么不将size直接设置为0。当向容器中添加新元素时,只需让新元素覆盖原本的元素就好了,这样不是更高效吗?并且由于存在Java垃圾回收机制,我们也无需考虑被覆盖元素的回收问题。
笔者思考了一下,得出以下见解:
在实际应用场合中,我们不能保证每一次清空后,立即会有新元素添加进来。如果只是将size置为0,那么没有被覆盖的元素的引用依然存在,仍然占用内存空间,尤其当原本容器元素数量特别多的时候,会造成大量的内存泄露。因此,在便有如上clear()的实现。
其优点在于:没有内存泄漏问题;
缺点在于:要遍历整个容器,效率不高

标签:容器,遍历,Java,clear,元素,设置,null,size
From: https://www.cnblogs.com/robertnotcarrot/p/18622453

相关文章

  • java-io流
    根据流的方向:输入流(InputStream/Reader):从数据源读取数据到程序中。输出流(OutputStream/Writer):将数据从程序写入到目的地。根据流处理信息的大小:字节流(ByteStreams):以字节为单位处理数据,适用于所有类型的数据传输,如二进制文件。字符流(CharacterStreams):以字符为单位处理数据......
  • 基于Java的班级管理系统的设计与实现 毕业设计-附源码60085
    摘要班级管理是学校管理的重要组成部分,传统的班级管理方式存在效率低下、信息不及时等问题。为了解决这些问题,本文设计并实现了一个基于 Java 的班级管理系统。 本论文旨在设计并实现一个基于 Java 的班级管理系统,以提高班级管理的效率和准确性。该系统采用了SSM框架......
  • 深刻理解JAVA8新特性
    相信每一位java面试者都会问一个问题,你知道jdk1.8新特性吗?当在回答这个问题的时候,我们都会说一大堆,比如说,可以支持lambda表达式,引入Optional类让开发开始手动检查null,避免运行时候的NPE等等,可是,对于一名java从业者来说,我觉得不够,没有说到点子上,如果面试官很水,当然就让你过啦,然......
  • springboot-Java搭建的后端服务器返回前端请求结果
    访问spring.io,在上方的projects找到springInitializr,配置如下:点击下方的GENERATE下载。解压到你的workspace文件夹,然后将该位置复制,IDEA中点击左上角->打开,粘贴文件地址,选中springboottest根目录,确定。此时点信任,信任该文件夹,打开新窗口。还是左上角->setting,搜索Maven,配置......
  • Java程序打包成exe,无Java环境也能运行
    Java程序开发完成后,通常情况下以jar包的形式发布。但有时我们需要给非软件开发人员使用程序,如制作好窗体应用,把它发给没有java开发环境的人使用,此时就需要制作exe安装包。本文介绍如何将java程序制作成exe安装包,并提供有图片和三方依赖jar包的解决方案。1.安装exe制作软件制......
  • JAVA-通过大疆TSDK的API直接获取红外图片温度信息
    一、前言看过很多关于大疆红外图片用TSDK取温的方式,但是网上能搜到的大部分教程都是通过官方下载文件smple编译出来的程序来取温,如果这样做,虽然确实也能够实现目的,但不得不说,不但会降低运行速度,而且代码调用起来也麻烦。所以不如研究一下怎么直接调用他们的C++API。先说下大疆......
  • Java 小白入门必备知识点
    14.表达式:表达式是由运算符、操作数和方法调用按照语言的语法构造而成的符号序列15.条件运算符16.实现打印出x的值17.实现从键盘录入的功能18.这里的sc、a、b、str全部是变量名19.在java中键盘键入数据时需要导包20.if单分支选择结构21.双分支选择结构22.switch......
  • java--程序--输入--Scanner
    packageInputTest;importjava.util.Scanner;publicclassInputTest{publicstaticvoidmain(String[]args){//English();Chiness();}publicstaticvoidEnglish(){Scannerin=newScanner(System.in);......
  • 阿里P7架构师,耗时十年整理的Java面试飞升笔记,差距不是一点点
    这个问题就不用假如了,我本身从事Java开发已经十年了,去年因为疫情原因导致公司需要断臂求生,熟悉的那些小伙伴们相继离开,心中五味杂陈,思前想后决定离开这个呆了五年的地方。在猎头的引荐下,最终选择了阿里;说是P7的职位,还是需要从小项目开始做起,这一年的时间我都是在忙着组建团队......
  • java高频面试题(2025最新)
    后续会持续更新,广告回来更精彩!如果想看原理可以看看我的另几篇文章没有过多的讲解原理,你们只要背会了,就能快乐两年半。一.java基础1.八大基础类型数字型: 字节类型(byte)、短整型short、整型int、长整型Long、单精度浮点数float、双精度浮点数double字符型: 字符类型char、......