模拟ArrayList底层实现
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底层实现相关推荐
- 手撕ArrayList底层,透彻分析源码
ArrayList概述 Hello大家好,今天就来介绍一下ArrayList,说到ArrayList,很多人都知道它的底层是使用数组实现的,线程不安全的,说到它的特点,都会说查找快,增删慢,因为面试题 ...
- ArrayList底层原理
ArrayList底层原理 ArrayList在工作中经常用到,今天来看一下ArrayList的底层是如何实现的?在这之前,先抛出几个问题. 1.ArrayList底层实现的数据结构是什么? 2.Ar ...
- ArrayList底层源码分析
声明:本文为作者原创,请勿装载,如过转载,请注明转载地址 文章目录 ArrayList底层源码分析 1. 继承Serializable接口 2. 继承Cloneable接口 2.1 浅拷贝 2.2 深 ...
- 2023年7月14日,ArrayList底层
集合框架图: 集合和数组的区别 AarrayList ArrayList底层实现原理 ArrayList的底层实现是基于数组的动态扩容. 初始容量:当创建一个新的ArrayList对象时,它会分配一个 ...
- 详解java集合之ArrayList——底层实现是一个Object数组。分析ArrayList的自动扩容,原来不一定是1.5倍
ArrayList的底层实现--非private权限的Object数组 ArrayList的类结构图 1. ArrayList的创建 1.1 参数为空的构造方法--ArrayList内部的Object ...
- Java集合—ArrayList底层原理
原文作者:0 errors 0 warnings 原文地址:用大白话告诉你ArrayList的底层原理 目录 一.数据结构 二.线程安全性 三.继承关系 四.构造方法 五.add()方法 六.扩容机制 ...
- java arraylist底层实现原理_ArrayList和LinkedList底层原理
ArrayList和LinkedList都是List的实现类,是在日常开发中经常被使用到的两个集合,我们来结合源码看下两个集合的不同之处. 先来看下ArrayList的源码: // 默认的初始化大小p ...
- 小学生也能看懂的ArrayList底层原理
阅读指引:本文包含源码,如果不想阅读源码,建议跳过 "ArrayList 的主要方法" 中的源码分析部分,直接看每一部分的小总结. 简单介绍 ArrayList是 Java 集合框 ...
- java arraylist底层实现原理_ArrayList的底层实现原理
//elementData中已存放的元素的个数,注意:不是elementData的容量 private intsize;//elementData的默认容量为10 private static fin ...
最新文章
- android教育平板,调查称iPad在教育领域占优势 Android平板为零
- button/input链接方式全攻略 [转]
- 计算机系统集成项目的管理及应用
- 【JavaSE05】Java中方法与重载、递归-思维导图
- python 字典的一些简单操作
- linux测试dvi接口,Pro Capture-DVI 2路高清DVI采集卡 支持Linux系统更专业
- ASP.NET下MVC设计模式的实现
- Java Socket实战之四 传输压缩对象
- 洛谷——P1296 奶牛的耳语
- JQUERY 使用键盘左右键切换选项卡
- 第四套人民币及8001的简介
- FPGA零基础学习:数字电路中的数字表示
- JAVA学习homework的Car、Bus、motoVehicle
- css动画走马灯5秒,用animation制作走马灯
- tp获取php异常信息,ThinkPHP 异常处理
- 手撸spring源码分析IOC实现原理
- 王学岗——————H265实现低延时投屏,从零实现高清无损投屏(对应第六节课)
- Android 应用界面设计
- GAN(生成对抗网络)和IQA(图像质量评价能擦出什么样的火花呢?)简单聊一些近来published的论文
- 验证“哥德巴赫猜想”,数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。比如:24=5+19,其中5和19都是素数。本实验的任务是设计一个程序,验证20亿以内
热门文章
- ICCV2021 人脸深伪分析挑战赛 重磅来袭
- CV Code|计算机视觉开源周报20200502期
- CVPR 2020|打脸SOTA!不能忍,谷歌发起图像匹配挑战赛
- 一个Python爬虫案例让你看清Python2和3之间的区别
- 重磅!李沐在斯坦福开新课了!
- 港中文等提出:开放世界实体分割
- 这17 种方法让 PyTorch 训练速度更快!
- 总结 | “卷积”其实没那么难以理解
- 微信开发者配置服务器信息,【开发】微信验证开发者接口配置信息,服务器没有正确响应Token....
- 还在 Fine-tune 大规模预训练模型? 该了解下最新玩法 Prompt-tuning啦