基于Object/数组模拟实现ArrayList的增、删、改、查

来源:互联网 发布:mac os x 升级系统 编辑:程序博客网 时间:2024/06/08 17:21
1、定义了一个DataList接口,里面包含了所需要实现的方法

2、用MyArrayList实现DataList接口,实现里面所定义的方法

3、扩容的核心思想:可以实现动态扩容,当检测到数组容量不够时,自动扩大为原来的1.5倍,扩容的核心思想是将旧数组copy到新数组,再将新数组赋值给当前数组。

4、实现代码如下:

package arrayList;/** * 线性表接口 * @author tiger */public interface DataList{void add(Object obj);boolean add(int index,Object obj);boolean remove(int index);boolean set(int index,Object obj);Object get(int index);int size();}package arrayList;import java.util.Arrays;/** * 基于数组实现 * @author tiger * */class MyArrayList implements DataList{private final static int INIT_SIZE = 5;private Object[] ary = new Object[INIT_SIZE];//初始化数组个数private int size = 0;//记录实际元素个数public MyArrayList() { }/* * 数组元素的添加 */@Overridepublic void add(Object obj) {//判断是否需要扩容if (size + 1 > ary.length) {//对数组进行扩容ensureCapacity();}ary[size] = obj;size ++;}/* * 数组元素的插入 */@Overridepublic boolean add(int index, Object obj) {//判断是否需要扩容if (size + 1 > ary.length) {ensureCapacity();//执行扩容操作}if (index < size){//向右边移动一位for (int i = size - 1; i >=index; i--) {ary[i+1] = ary[i];}}ary[index] = obj;//将元素插入指定index位置size ++;return true;}@Overridepublic boolean remove(int index) {if (index >= size) {System.out.println("--index不存在--");return false;}//向左移一位for (int i = index; i < size; i++) {ary[i] = ary[i+1];}ary[size] = null;size --;return true;}@Overridepublic boolean set(int index, Object obj) {ary[index] = obj;return true;}@Overridepublic Object get(int index) {return ary[index];}@Overridepublic int size() {return this.size;}@Overridepublic String toString() {return "{ary=" + Arrays.toString(ary) + "}";}/* * 实现对数组的扩容 * 核心思想:创建一个容量更大的新数组替换容量不够的旧数组。 */private void ensureCapacity(){Object[] newArray = new Object[ary.length + (ary.length >> 1)];//容量为原来的1.5倍//将旧数组复制迁移到新数组//System.out.println("新数组大小为" + (ary.length + (ary.length >> 1)));for (int i = 0,j = 0; i < ary.length; i++,j++) {newArray[j] = ary[i];}//将新数组指向原来的this.ary = newArray;}}package arrayList;import java.util.ArrayList;import java.util.List;@SuppressWarnings("all")public class MyArrayListTest {public static void main(String[] args) {DataList myArraylist = new MyArrayList();myArraylist.add("today");myArraylist.add("is");myArraylist.add("a");myArraylist.add("nice");myArraylist.add("day!");myArraylist.add("How");myArraylist.add("do");myArraylist.add("you");System.out.println("添加元素 : "+myArraylist);myArraylist.remove(myArraylist.size() - 1);System.out.println("移除指定所有处的值 : "+myArraylist);System.out.println("取得指定所有处的值 : "+myArraylist.get(1));myArraylist.set(1, "tiger");System.out.println("修改之后的 : "+myArraylist);}}