package com.huqi.demo2shili.d3;import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;public class TestArrayList {/*** ArrayList* * 添加add*  1> 底层是一个Object的动态数组*     2> 默认创建对象的时候会创建一个空的数组*   3> 当添加第一个元素的时候,会给这个数组初始化10个位置的空间*    4> 当数组存放满了的时候,会将数组进行扩容,扩成原数组的1.5倍*   5> 然后继续添加,可以添加null* * 删除remove*  1> 根据数组下标删除,假设要删除下标为n的元素*        1.首先取出要删除位置n的元素*        2.将n+1到最后一个元素整体往前移动一位,对n位置的值进行覆盖*      3.返回被删除的n位置的元素* *   2> 根据元素进行删除,假设要删除的元素为str*        1.遍历数组,查找这个元素是否存在于数组中*      2.如果不存在,返回一个false*      3.如果存在,假设这个元素的下标为n*         4.将n+1到最后一个元素整体往前移动一位,对n位置的值进行覆盖*      5.返回true* */public static void main(String[] args) {//List list = new ArrayList();ArrayListTest list = new ArrayListTest();//添加4个元素for(int i = 0; i < 4; i++){list.add("胡琦"+ i);}list.print();//添加一个nulllist.add(null);//再添加7个元素,数组将进行扩容for(int i = 5; i < 11; i++){list.add("胡琦"+ i);}list.print();//删除指定位置的元素System.out.println("删除的元素是 : " + list.remove(2));list.print();//删除指定位置的元素,错误下标System.out.println("删除的元素是 : " + list.remove(10));list.print();//删除指定元素,删除不存在的元素System.out.println("删除元素是否成功 : " + list.remove("胡琦2"));list.print();//删除指定元素System.out.println("删除元素是否成功 : " + list.remove("胡琦4"));list.print();//删除指定元素,删除nullSystem.out.println("删除元素是否成功 : " + list.remove(null));list.print();}}class ArrayListTest{//创建对象时创建一个Object空数组private Object[] arrs;//最小容量,最近放入的元素的下一个位置下标,当前数组的元素个数private int index = 0;//向集合中添加元素public void add(Object obj){//判断是否是首次放入元素//是的话将数组初始化10个长度if(index == 0){arrs = new Object[10];}//判断数组的容量是否满了if(index == arrs.length){//数组元素个数和数组长度相同//如果已经存放满了.就对数组进行扩容//容量是原来数组的1.5倍//arrs = Arrays.copyOf(arrs, (arrs.length + arrs.length >> 1));arrs = Arrays.copyOf(arrs, (int)(arrs.length * 1.5));System.out.println("集合进行了扩容...");}//将元素放入数组中//arrs[index++] = obj;arrs[index] = obj;index++;}//根据元素下标删除元素public Object remove(int n){//System.out.println("index = " + index);//检查输入的下标位置是否正确if(!(n >= 0 && n < index)){System.out.println("输入有误");return "删除失败";}else{Object obj = arrs[n];//获取删除的元素//将要删除的位置的元素后面的元素整体往前移动一个位置move(n);//删除成功一个元素,将index减一index--;return obj;    }}//根据元素的内容删除元素public boolean remove(Object obj){//看是否是空元素//如果是空元素就直接删除覆盖if(obj == null){for(int i = 0; i < arrs.length; i++){//找到了第一个空if(arrs[i] == null){//将要删除的位置的元素后面的元素整体往前移动一个位置move(i);index--;return true;}}}else{for(int i = 0; i < arrs.length; i++){//防止空指针异常if(arrs[i] == null){return false;}//如果这个元素在集合中存在就进行删除if(arrs[i].equals(obj)){//将要删除的位置的元素后面的元素整体往前移动一个位置move(i);index--;return true;}}}return false;}//移动元素private void move(int i){//i为要覆盖的元素的下标//集合中要删除的元素后面的元素个数int n = arrs.length - i - 1;//判断这个元素是不是最后一个元素if(n > 0){//复制要删除的元素的后面的所有元素//原数组--从元素组的i+1位置开始复制--目标数组--从目标数组的i位置开始复制--要复制的元素个数//即将数组的i+1到最后一个元素复制到新数组的i到最后一个元素,将原本i位置的元素进行覆盖System.arraycopy(arrs, i+1, arrs, i, n);}else{arrs[i] = null;}}//打印集合public void print(){//遍历数组中包含的元素for(int i = 0; i < index; i++){System.out.print(arrs[i] + "  ");}System.out.println();System.out.println("集合含有的元素个数为: " + index);System.out.println("数组当前长度为 : " + arrs.length);System.out.println("-----------------------------");}}

ArrayList底层原理简单代码实现实例相关推荐

  1. ArrayList底层原理

    ArrayList底层原理 ArrayList在工作中经常用到,今天来看一下ArrayList的底层是如何实现的?在这之前,先抛出几个问题. 1.ArrayList底层实现的数据结构是什么? 2.Ar ...

  2. Java集合—ArrayList底层原理

    原文作者:0 errors 0 warnings 原文地址:用大白话告诉你ArrayList的底层原理 目录 一.数据结构 二.线程安全性 三.继承关系 四.构造方法 五.add()方法 六.扩容机制 ...

  3. LR_scheduler及warmup底层原理和代码分析

    LR_scheduler LR_scheduler是用于调节学习率lr的,在代码中,我们经常看到这样的一行代码 scheduler.step() 通过这行代码来实现lr的更新的,那么其中的底层原理是什 ...

  4. 小学生也能看懂的ArrayList底层原理

    阅读指引:本文包含源码,如果不想阅读源码,建议跳过 "ArrayList 的主要方法" 中的源码分析部分,直接看每一部分的小总结. 简单介绍 ArrayList是 Java 集合框 ...

  5. ROS机器人操作系统底层原理及代码剖析

    0 目的 本文介绍ROS机器人操作系统(Robot Operating System)的实现原理,从最底层分析ROS代码是如何实现的. 1 序列化 把通信的内容(也就是消息message)序列化是通信 ...

  6. HashSet底层原理简单详解

    1.HashSet底层其实是一个HashMap容器,HashSet的无参构造方法是创建一个HashMap对象 private transient HashMap<E, Object> ma ...

  7. Lucene底层原理和优化经验分享(2)-Lucene优化经验总结

    转自:https://blog.csdn.net/njpjsoftdev/article/details/54133548 系统优化遵从木桶原理:一只木桶能盛多少水,并不取决于最高的木板,而取决于最短 ...

  8. 【Go语言学习】——go 数据结构底层原理

    go 数据结构底层原理 array底层原理 go中的数组是由固定长度的特定类型元素组成的序列,数组的长度是数据类型的组成方式,所以不同长度和不同类型的元素组成的数组是不同的数组类型.数组属于值类型,因 ...

  9. java中数据类型byte的底层原理透析

    byte数据类型详解 二进制.位.字节的关系 二进制 位 字节 三者联系 ascll码表 Byte数据类型底层原理说明 代码与结果展示 结果透析 二进制.位.字节的关系 二进制 十进制:0,1,2,3 ...

  10. 数据结构:竞标赛排序 原理简单

    数据结构:竞标赛排序 原理简单 代码不会写,太复杂了

最新文章

  1. 【Ubuntu】使用过的ubuntu工具记录
  2. if xxx.strip()函数的使用
  3. 【错误记录】Flutter 使用 MediaQuery 适配全面屏报错 ( No MediaQuery widget ancestor found. )
  4. jsap支付_Java命令行界面(第20部分):JSAP
  5. 互联网晚报 | 11月21日 星期日 | B站公布《三体》动画首个预告片;涪陵榨菜回应天价礼盒;农行个人贷款余额突破7万亿元...
  6. Perl 第二章 簡單變量
  7. 阿里撬得动“印度版”抖音吗?
  8. 爬虫项目——BS练手(2)
  9. 实现了一个本地版本的在线json测试环境光-pythono
  10. Java集合Collection之实现原理解读(LinkedList)
  11. 二十九 Python分布式爬虫打造搜索引擎Scrapy精讲—selenium模块是一个python操作浏览器软件的一个模块,可以实现js动态网页请求...
  12. win10桌面快捷方式变白,解决方式
  13. 安卓设备设置 orientation 最简单的方法
  14. 苹果手机打电话没有声音怎么回事_手机打电话听筒没有声音,只有打开免提时才有声音,该怎么办?...
  15. Panasonic Lumix GH5: Tips, Tricks, and Techniques 松下Lumix GH5使用技巧 Lynda课程中文字幕
  16. Could not open the editor: URLDecoder: Illegal hex characters in escape (%) pattern - For input stri
  17. Introspector
  18. linux 用谷歌浏览器总是崩溃,谷歌浏览器显示喔唷崩溃啦(谷歌浏览器经常崩溃怎么办)...
  19. WPF 3D 点光源学习
  20. 敏捷项目管理的前世今生及应用-Part 2(之3355)

热门文章

  1. 初学Linux时用到的一点复制,粘贴,删除,创建指令
  2. 计算机联锁与全电子执行单元,计算机联锁全电子执行单元.docx
  3. 百度BML-飞桨服务器以及Jetson nano部署实战案例(下)
  4. html中竖线怎么写,HTML如何写出竖线
  5. 用友t3服务器系统管理软件,T3用友通系统管理常见问题及解决方案
  6. 初识二维码 第十八讲 编码转换
  7. python随机生成4位验证码并判断是否正确_利用Python生成随机4位验证码
  8. vue将文件/图片/视频批量打包成压缩包,并进行下载
  9. html中td是什么模块,html td什么意思
  10. nmap的下载与安装