Java数据结构——模拟实现Arraylist

一、构建Arraylist基本属性

1.模拟ArrayList我们基于数组方式实现

2.我们设置Arraylist的初始空间大小为10

3.我们用usedSize记录数组元素个数

二、模拟实现Arraylist中的各种方法

1.打印顺序表

 2.判断数组是否为满的

 3.实现Arraylist尾插功能

注意:如果尾插时是满的话需要先扩容

4.在指定位置pos插入数据data

注意:

4.1在插入数据前数组是否为满的,是的话需要扩容

4.2在插入数据前需要判断位置是否合法

5.判断是否包含某元素

6.找到某元素的对应位置,没找到返回-1;

7.获取某pos位置的元素

注意:

7.1需先判断pos是否合法

7.2判断该数组是否为空数组

8.给pos位置元素更新为value

9.删除第一次出现是关键字key

 10.获取链表长度

11.清空顺序表

 三、模拟运行MyArraylist主要方法

运行结果:

 四、完整代码

 MyArraylist:

import java.lang.reflect.Array;
import java.util.Arrays;

public class MyArraylist<len> {

    public int[] elem;
    public int usedSize;//0
    //默认容量
    private static final int DEFAULT_SIZE = 10;

    public MyArraylist() {
        this.elem = new int[DEFAULT_SIZE];
    }

    /**
     * 打印顺序表:
     * 根据usedSize判断即可
     */
    public void display() {
        for (int i = 0; i < this.usedSize; i++) {
            System.out.print(this.elem[i]+" ");
        }
    }

    // 新增元素,默认在数组最后新增
    public void add(int data) {
        if (isFull()) {
            this.elem = Arrays.copyOf(elem, elem.length * 2);
        }
        this.elem[this.usedSize] = data;
        this.usedSize++;
    }

    /**
     * 判断当前的顺序表是不是满的!
     *
     * @return true:满
     */
    public boolean isFull() {
        if (elem.length == usedSize) {
            return true;
        }
        return false;
    }


    private boolean checkPosInAdd(int pos) {
        if (pos < 0 || pos > this.elem.length) {

            return true;
        }
        return false;//合法
    }

    // 在 pos 位置新增元素
    public void add(int pos, int data) {
        if (isFull()) {
            this.elem = Arrays.copyOf(elem, elem.length * 2);
        }
        if (checkPosInAdd(pos)) {
            System.out.println("位置不合法");
        }

        for (int i = usedSize - 1; pos <= i; i--) {
            elem[i + 1] = elem[i];
            elem[pos] = data;
            usedSize++;
        }

    }


    // 判定是否包含某个元素
    public boolean contains(int toFind) {
        for (int i = 0; i < usedSize; i++) {
            if (toFind == this.elem[i]) {
                return true;
            }

        }
        return false;
    }

    // 查找某个元素对应的位置
    public int indexOf(int toFind) {
        for (int i = 0; i < usedSize; i++) {
            if (toFind == this.elem[i]) {
                return i;
            }

        }
        return -1;
    }

    // 获取 pos 位置的元素
    public int get(int pos) {
        if (checkPosInAdd(pos)) {
            System.out.println("位置不合法");
        }
        if (isEmpty()){
            System.out.println("该数组为空数组");
        }

        return this.elem[pos];
    }

    private boolean isEmpty() {
        return usedSize == 0;
    }

    // 给 pos 位置的元素设为【更新为】 value
    public void set(int pos, int value) {
        if (checkPosInAdd(pos)) {
            System.out.println("数据不合法");
        }
        if (isEmpty()) {
            System.out.println("该数组为空");
        }
        this.elem[pos] = value;
    }


    /**
     * 删除第一次出现的关键字key
     *
     * @param key
     */
    public void remove(int key) {
        if (isEmpty()) {
            System.out.println("该数组为空");
        }
        int getpos = indexOf(key);//找到该元素位置
        if (getpos == -1) {
            System.out.println("该数组没有该元素");
        }
        int i = getpos;
        for (; i < usedSize - 1; i++) {
            elem[i] = elem[i + 1];
        }
        usedSize--;
    }


    // 获取顺序表长度
    public int size() {
        return usedSize;
    }

    // 清空顺序表
    public void clear() {
        for (int i = 0; i < usedSize - 1; i++) {
            this.elem[i] = 0;
        }
        usedSize = 0;
    }

}

test:

public class test{
public static void main(String[] args) {
        MyArraylist myArraylist=new MyArraylist();
        myArraylist.add(1);//给数组添加元素,默认尾插
        myArraylist.add(2);
        myArraylist.add(3);
        myArraylist.display();//尾插后得初始数组
        System.out.println("\n---------------");
        myArraylist.add(2,5);//在pos下标插入元素5
        myArraylist.display();
        System.out.println("\n---------------");
        System.out.println(myArraylist.indexOf(5));//得到元素5的下标
        System.out.println("\n---------------");
        System.out.println(myArraylist.isFull());//判断数组是否为空
        System.out.println("\n---------------");
        myArraylist.remove(5);//删除该数组第一次出现的元素5
        myArraylist.display();
        }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值