自己实现 ArrayList
来源:互联网 发布:windows启动程序脚本 编辑:程序博客网 时间:2024/06/05 07:50
英文原文
ArrayList 类似于 Array 对象,但是当列表中的对象数量增加时,它提供了动态空间分配的功能。在 Array 对象中,我们需要在初始化时提供数组的大小,但这并不是 ArrayList 所必需的。实际上,当您初始化ArrayList时,它将自动将其容量分配为10。
这里我用 Array 对象实现ArrayList,并提供 get(index),add(object) 和 remove(index) 等基本函数。
import java.util.ArrayList;/** * <p></p> * * @author 三产 * @version 1.0 * @date 2017-03-24 * @QQGroup 213732117 * @website http://www.coderknock.com * @copyright Copyright 2017 拿客 coderknock.com All rights reserved. * @since JDK 1.8 */public class MyArrayList { private static final int SIZE_FACTOR=5; private Object data[]; private int index; private int size; public MyArrayList(){ this.data=new Object[SIZE_FACTOR]; this.size=SIZE_FACTOR; } public void add(Object obj){ System.out.println("index:"+this.index+"size:"+this.size+"data size:"+this.data.length); if(this.index==this.size-1){ //我们需要加大data[]的大小 increaseSizeAndReallocate(); } data[this.index]=obj; this.index++; } private void increaseSizeAndReallocate() { this.size=this.size+SIZE_FACTOR; Object newData[]=new Object[this.size]; for(int i=0; i<data.length;i++){ newData[i]=data[i]; } this.data=newData; System.out.println("***index:"+this.index+"size:"+this.size+"data size:"+this.data.length); } public Object get(int i) throws Exception{ if(i>this.index-1){ throw new Exception("ArrayIndexOutOfBound"); } if(i<0){ throw new Exception("Negative Value"); } return this.data[i]; } public void remove(int i) throws Exception{ if(i>this.index-1){ throw new Exception("ArrayIndexOutOfBound"); } if(i<0){ throw new Exception("Negative Value"); } System.out.println("Object getting removed:"+this.data[i]); for(int x=i; x<this.data.length-1;x++){ data[x]=data[x+1]; } this.index--; } public static void main(String[] args) throws Exception { MyArrayList mal = new MyArrayList(); mal.add("0"); mal.add("1"); mal.add("2"); mal.add("3"); mal.add("4"); mal.add("5"); mal.add("6"); mal.add("7"); mal.add("8"); mal.add("9"); mal.remove(5); System.out.println(mal.get(7)); }}
输出如下:
index:0size:5data size:5index:1size:5data size:5index:2size:5data size:5index:3size:5data size:5index:4size:5data size:5***index:4size:10data size:10index:5size:10data size:10index:6size:10data size:10index:7size:10data size:10index:8size:10data size:10index:9size:10data size:10***index:9size:15data size:15Object getting removed:58
这只是使用 Array 基本实现 ArrayList 的功能,只为了解其原理。还请使用 JDK 中的 ArrayList。
原文中并为实现泛型,我们就来补充下:
import java.util.ArrayList;/** * <p></p> * * @author 三产 * @version 1.0 * @date 2017-03-24 * @QQGroup 213732117 * @website http://www.coderknock.com * @copyright Copyright 2017 拿客 coderknock.com All rights reserved. * @since JDK 1.8 */public class MyArrayList<T> { private static final int SIZE_FACTOR=5; private Object data[]; private int index; private int size; public MyArrayList(){ this.data=new Object[SIZE_FACTOR]; this.size=SIZE_FACTOR; } public void add(T obj){ System.out.println("index:"+this.index+"size:"+this.size+"data size:"+this.data.length); if(this.index==this.size-1){ //我们需要加大data[]的大小 increaseSizeAndReallocate(); } data[this.index]=obj; this.index++; } private void increaseSizeAndReallocate() { this.size=this.size+SIZE_FACTOR; Object newData[]=new Object[this.size]; for(int i=0; i<data.length;i++){ newData[i]=data[i]; } this.data=newData; System.out.println("***index:"+this.index+"size:"+this.size+"data size:"+this.data.length); } public T get(int i) throws Exception{ if(i>this.index-1){ throw new Exception("ArrayIndexOutOfBound"); } if(i<0){ throw new Exception("Negative Value"); } return (T) this.data[i]; } public void remove(int i) throws Exception{ if(i>this.index-1){ throw new Exception("ArrayIndexOutOfBound"); } if(i<0){ throw new Exception("Negative Value"); } System.out.println("Object getting removed:"+this.data[i]); for(int x=i; x<this.data.length-1;x++){ data[x]=data[x+1]; } this.index--; } public static void main(String[] args) throws Exception { MyArrayList<Integer> mal = new MyArrayList<Integer>(); mal.add(0); mal.add(1); mal.add(2); mal.add(3); mal.add(4); mal.add(5); mal.add(6); mal.add(7); mal.add(8); mal.add(9); mal.remove(5); System.out.println(mal.get(7)); }}
这里其实只是修改了 add(T)、get(index) 方法。
0 0
- 自己实现ArrayList
- 自己实现ArrayList
- 自己实现一下ArrayList
- 自己实现 ArrayList
- 自己实现ArrayList
- JAVA--自己实现ArrayList
- 自己实现ArrayList内存代码
- 自己实现ArrayList类(大部分
- 12、自己实现的ArrayList
- 自己实现一个ArrayList,模仿ArrayList类的底层结构
- 实现自己的ArrayList和HashMap
- 实现自己的ArrayList和HashMap
- 实现自己的ArrayList和HashMap
- Java -- 自己实现数组列表(Arraylist)
- 自己实现一个泛型ArrayList
- 自己用java实现LinkList和arrayList
- MyArrayList——自己实现ArrayList
- 【java集合】自己实现简易的ArrayList
- SQL连接学习总结
- 如何在Xcode里锁定文件不让别人编辑呢
- SPFA
- OC与JS的交互(iOS与H5混编)
- easyUI dialog的close和destroy区别
- 自己实现 ArrayList
- 运用canvas制作简单的画图
- 关于html、css、js是否写在一个文件里
- 第三次上机实验
- C++实验3
- 网易2017年秋招第三题
- c++作业3
- NGUI开发优化技巧(上)
- 网络爬虫技术