返回顶部
首页 > 资讯 > 后端开发 > Python >javaArrayList中的remove方法介绍
  • 577
分享到

javaArrayList中的remove方法介绍

2024-04-02 19:04:59 577人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

先看一段代码,看看自定义的ArrayList中的remove设计是否有问题。 public class MyArrayList { private Object[] mDat

先看一段代码,看看自定义的ArrayList中的remove设计是否有问题。

public class MyArrayList {
    private Object[] mData = new Object[0];
    private int mSize = 0;
    // 删除第i个元素
    public void remove(int i) {
        if (i < 0 || i >= mSize) return;
        for (int index = i; index < mSize - 1; index++) {
            mData[index] = mData[index + 1];
        }
        --mSize;
    }
    // ... 其他方法略
}

走进源码

针对remove,有两种方式实现

(1)根据位置删除,代码如下所示:

public E remove(int index) {
        rangeCheck(index);

        modCount++;
        E oldValue = elementData(index);

        int numMoved = size - index - 1;
        if (numMoved > 0)
            System.arraycopy(elementData, index+1, elementData, index,
                             numMoved);
        elementData[--size] = null; // clear to let GC do its work

        return oldValue;
    }

实现步骤:

检查所要移除的位置是否落在数组元素长度之内。

修改次数+1把需要删除的元素赋给oldValue,一遍方法返回旧元素numMoved计算出的是删除元素后需要移动的元素数。

当numMoved>0 说明删除元素后需要把后面的元素往前移动。

当numMoved<0 时,说明删除的元素为最后一个元素。

直接把最后一个位置置空。(分析重点:将最后的位置要设置为空,让垃圾回收器回收 ,防止对象游离)返回被删值

(2)根据内容删

参考资料:

public boolean remove(Object o) {
        if (o == null) {
            for (int index = 0; index < size; index++)
                if (elementData[index] == null) {
                    fastRemove(index);
                    return true;
                }
        } else {
            for (int index = 0; index < size; index++)
                if (o.equals(elementData[index])) {
                    fastRemove(index);
                    return true;
                }
        }
        return false;
}

其中的fastRemove,代码如下:

private void fastRemove(int index) {
        modCount++;
        int numMoved = size - index - 1;
        if (numMoved > 0)
            System.arraycopy(elementData, index+1, elementData, index,
                             numMoved);
        elementData[--size] = null; // clear to let GC do its work
}

实现步骤:

因为对象是否相等需要使用equals方法,但是空对象不能使用equals方法比较。

因此需要先判断传入的对象是否为空。

为空时 使用==来寻找数组中空对象并删除。不为空时,便使用equals遍历寻找来删除相应对象。

OK,ArrayList的第一阶段的研究到此结束,针对开头的问题,已经找到了答案。

remove的设计有问题,–mSize;之后需要把mData[–mSize]=null;让垃圾回收器回收 ,防止对象游离。

未来有时间的研究方向大概如下,

​ArrayList​​ VS ​​LinkedList​

如何自定义一个​​ArrayList​

ArrayList的研究有时间可以再深入了解一下。网上的文章已经很多,在此不在赘述。旨在加深自我认知,上述大家如有疑问,欢迎PK。

到此这篇关于java ArrayList中的remove方法介绍的文章就介绍到这了,更多相关java ArrayList中的remove内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: javaArrayList中的remove方法介绍

本文链接: https://lsjlt.com/news/162030.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • javaArrayList中的remove方法介绍
    先看一段代码,看看自定义的ArrayList中的remove设计是否有问题。 public class MyArrayList { private Object[] mDat...
    99+
    2024-04-02
  • Python List remove()的使用方法介绍
    这篇文章主要介绍“Python List remove()的使用方法介绍”,在日常操作中,相信很多人在Python List remove()的使用方法介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Pyt...
    99+
    2023-06-20
  • ArrayList在for循环中使用remove方法移除元素方法介绍
    有时候我们需要在一个ArrayList的for循环中动态删除元素的需求, 废话不多说看代码List<Integer> list = new ArrayList<Integer>(); list.add(0); lis...
    99+
    2023-05-31
    arraylist for循环 remove
  • Android 中LayoutInflater.inflate()方法的介绍
    Android 中LayoutInflater.inflate()方法的介绍最近一直想弄明白LayoutInflater对象的inflate方法的用法,今天做了实例。<LinearLayout android:id="@+id...
    99+
    2023-05-30
    android layoutinflater flat
  • vue中install方法介绍
    目录1、全局注册组件2、全局自定义指令vue提供install可供我们开发新的插件及全局注册组件等 install方法第一个参数是vue的构造器,第二个参数是可选的选项对象 ex...
    99+
    2024-04-02
  • Java中的方法内联介绍
    目录1. 什么是方法内联2. 方法内联的重要性3. Java中方法内联的困难继承类型关系分析 CHA总结 1. 什么是方法内联 例如有下面的原始代码: static cla...
    99+
    2024-04-02
  • android:descendantFocusability方法介绍
    此方法适用于所有母控件无法获取焦点的情况 开发中很常见的一个问题,项目中的listview不仅仅是简单的文字,常常需要自己定义listview,自己的Adapter去继承Bas...
    99+
    2022-06-06
    Android
  • C#中的Task.WaitAll和Task.WaitAny方法介绍
    一、简介 Task.WaitAll:等待所有提供的 Task 对象完成执行过程。 Task.WaitAny:等待提供的任一 Task 对象完成执行过程。 二、代码案例 Task.Wa...
    99+
    2024-04-02
  • C#中的Task.WhenAll和Task.WhenAny方法介绍
    一、简介 Task.WhenAll()、Task.WhenAny()这两个与Task.WaitALL()、Task.WaitAny()是有区别的,When是异步的,Wait是同步的。...
    99+
    2024-04-02
  • IDEA中GitLab的使用方法介绍
    本篇内容主要讲解“IDEA中GitLab的使用方法介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“IDEA中GitLab的使用方法介绍”吧!  首先安装githttps://git-scm.c...
    99+
    2023-06-20
  • 关于Python中的__init__()方法介绍
    本文主要介绍了Python中的__init__()方法,__init__()方法是Python学习当中重要的基础知识,需要的朋友可以参考下 __init__()方法意义重大的原因有两个。第一个原因是在对象生命周期中初始化是最重要的一步;...
    99+
    2023-09-25
    python microsoft 开发语言
  • 详解介绍Golang中的方法集
    Go语言是一门新兴的编程语言,优雅、高效、简洁的特点吸引了众多程序员的关注。Go语言在语法、平台支持、性能等多个方面优秀,在数据处理、高并发编程、Web编程等领域得到广泛应用,并具有极高的扩展性。Golang中的方法集是许多开发者不太熟悉的...
    99+
    2023-05-14
  • JQuery中$.ajax()方法参数介绍
    这篇文章主要讲解了“JQuery中$.ajax()方法参数介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JQuery中$.ajax()方法参数介绍”吧!...
    99+
    2024-04-02
  • java中String.intern()方法功能介绍
    下文笔者讲述java中String.intern()方法的功能简介说明,如下所示: String.intern原理 String.intern():    此方法...
    99+
    2024-04-02
  • Java中PrintWriter使用方法介绍
    目录简介文本文件的转码复制运行程序简介 PrintWriter 与 PrintStream 相同。PrintStream 只能接字节流,而 PrintWriter 既能接字节流又能接...
    99+
    2024-04-02
  • C#委托方法Func()中GetInvocationList()方法的用法介绍
    在日常使用委托时,有以下常用方法 方法名称说明 Clone  创建委托的浅表副本。 GetInvocationList  按照调用顺序返回此多...
    99+
    2024-04-02
  • VBS下Remove方法的用法
    这篇文章主要介绍“VBS下Remove方法的用法”,在日常操作中,相信很多人在VBS下Remove方法的用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”VBS下Remove方法的用法”的疑惑有所帮助!接下来...
    99+
    2023-06-08
  • WPF中图像处理的方法介绍
    和Winform中的GDI+相比,WPF提供了一组新的API用于显示和编辑图像。新API特点如下: 适用于新的或专用图像格式的扩展性模型。对包括位图 (BMP)、联合图像专家组 (J...
    99+
    2024-04-02
  • pure-ftpd中的两种chroot方法介绍
    这篇文章主要介绍“pure-ftpd中的两种chroot方法介绍”,在日常操作中,相信很多人在pure-ftpd中的两种chroot方法介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”pure-ftpd中的...
    99+
    2023-06-16
  • Java语言中的重构方法介绍
    重构是指对已有代码进行修改,以改善其设计和功能,但不改变代码的外部行为。在Java语言中,有许多重构方法可以使用。以下是一些常见的重...
    99+
    2023-08-29
    java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作