package chengbaoDemo;import java.util.ArrayList;
import java.util.Arrays;import comman.Human;
/*** ArrayList 底层实现*/
public class MyArrayList {/*** The value is used for Object Stroage.*/private Object value[];/***The size is the number of Object used. */private int size;public MyArrayList() {
//        value = new Object[10];this(10);}public MyArrayList(int size) {value = new Object[size];}/***Get the number of array's element  */public int size() {return size;}public boolean isEmpty() {return size == 0;}/***add element into the object storage. */public void add(Object obj) {value[size] = obj;size++;//扩容if (size >= value.length) {ensureCapacity();}}/***扩容 */public void ensureCapacity() {int newLength = value.length * 2 + 2;Object newObj[] = Arrays.copyOf(value, newLength);value = newObj;}/***Get the element from the object storage. */public Object get(int size) {rangeCheck(size);return value[size];}/*** Check whether occured  out of bound Exception*/ public void  rangeCheck(int index) {if (index < 0 || index > value.length) {try {throw new Exception();} catch (Exception e) {e.printStackTrace();}}  }/*** Return the index of the first occurrence of the specfied element in this value,* or -1 if the value does not contains the specfied element.*/public int indexOf(Object obj) {if (obj == null) {for (int i = 0 ; i < value.length; i++) {if (value[i] == null) {return i;}}return -1;}else {for (int i = 0; i < value.length; i++) {if (value[i].equals(obj)) {return i;}}return -1;}}/***Repaces the element at the specfied position in this object array *with the specfied element.*/public Object set(int index, Object obj) {rangeCheck(index);Object oldObj = value[index];value[index] = obj;return oldObj;}public void printf() {for (int i = 0; i < size; i++) {System.out.println(value[i]);}}///测试public static void main(String[] args) {MyArrayList mal = new MyArrayList(3);mal.add("asd");mal.add("qwe");mal.add("asd");mal.add("qwe");Human h = new Human("成宝");mal.add(h);System.out.println(mal.size());Human hs = (Human)mal.get(4);System.out.println(hs.getName());mal.add(null);System.out.println(mal.get(5));System.out.println(mal.indexOf(null));mal.printf();mal.set(5, 90);mal.printf();}}

转载于:https://www.cnblogs.com/chengbao/p/5184601.html

模拟ArrayList底层实现相关推荐

  1. 手撕ArrayList底层,透彻分析源码

    ArrayList概述 Hello大家好,今天就来介绍一下ArrayList,说到ArrayList,很多人都知道它的底层是使用数组实现的,线程不安全的,说到它的特点,都会说查找快,增删慢,因为面试题 ...

  2. ArrayList底层原理

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

  3. ArrayList底层源码分析

    声明:本文为作者原创,请勿装载,如过转载,请注明转载地址 文章目录 ArrayList底层源码分析 1. 继承Serializable接口 2. 继承Cloneable接口 2.1 浅拷贝 2.2 深 ...

  4. 2023年7月14日,ArrayList底层

    集合框架图: 集合和数组的区别 AarrayList ArrayList底层实现原理 ArrayList的底层实现是基于数组的动态扩容. 初始容量:当创建一个新的ArrayList对象时,它会分配一个 ...

  5. 详解java集合之ArrayList——底层实现是一个Object数组。分析ArrayList的自动扩容,原来不一定是1.5倍

    ArrayList的底层实现--非private权限的Object数组 ArrayList的类结构图 1. ArrayList的创建 1.1 参数为空的构造方法--ArrayList内部的Object ...

  6. Java集合—ArrayList底层原理

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

  7. java arraylist底层实现原理_ArrayList和LinkedList底层原理

    ArrayList和LinkedList都是List的实现类,是在日常开发中经常被使用到的两个集合,我们来结合源码看下两个集合的不同之处. 先来看下ArrayList的源码: // 默认的初始化大小p ...

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

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

  9. java arraylist底层实现原理_ArrayList的底层实现原理

    //elementData中已存放的元素的个数,注意:不是elementData的容量 private intsize;//elementData的默认容量为10 private static fin ...

最新文章

  1. android教育平板,调查称iPad在教育领域占优势 Android平板为零
  2. button/input链接方式全攻略 [转]
  3. 计算机系统集成项目的管理及应用
  4. 【JavaSE05】Java中方法与重载、递归-思维导图
  5. python 字典的一些简单操作
  6. linux测试dvi接口,Pro Capture-DVI 2路高清DVI采集卡 支持Linux系统更专业
  7. ASP.NET下MVC设计模式的实现
  8. Java Socket实战之四 传输压缩对象
  9. 洛谷——P1296 奶牛的耳语
  10. JQUERY 使用键盘左右键切换选项卡
  11. 第四套人民币及8001的简介
  12. FPGA零基础学习:数字电路中的数字表示
  13. JAVA学习homework的Car、Bus、motoVehicle
  14. css动画走马灯5秒,用animation制作走马灯
  15. tp获取php异常信息,ThinkPHP 异常处理
  16. 手撸spring源码分析IOC实现原理
  17. 王学岗——————H265实现低延时投屏,从零实现高清无损投屏(对应第六节课)
  18. Android 应用界面设计
  19. GAN(生成对抗网络)和IQA(图像质量评价能擦出什么样的火花呢?)简单聊一些近来published的论文
  20. 验证“哥德巴赫猜想”,数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。比如:24=5+19,其中5和19都是素数。本实验的任务是设计一个程序,验证20亿以内

热门文章

  1. ICCV2021 人脸深伪分析挑战赛 重磅来袭
  2. CV Code|计算机视觉开源周报20200502期
  3. CVPR 2020|打脸SOTA!不能忍,谷歌发起图像匹配挑战赛
  4. 一个Python爬虫案例让你看清Python2和3之间的区别
  5. 重磅!李沐在斯坦福开新课了!
  6. 港中文等提出:开放世界实体分割
  7. 这17 种方法让 PyTorch 训练速度更快!
  8. 总结 | “卷积”其实没那么难以理解
  9. 微信开发者配置服务器信息,【开发】微信验证开发者接口配置信息,服务器没有正确响应Token....
  10. 还在 Fine-tune 大规模预训练模型? 该了解下最新玩法 Prompt-tuning啦