【Java数据结构】自己实现一个顺序表ArrayList

学习目标:

目标:熟练运用Java所学知识


题目内容:

本文内容: 自己实现一个顺序表ArrayList


一、顺序表详细设计

1.类属性声明

private String[] array = null;//存储数据的数组
private int size = 0;//数组有效元素大小
private int capcity = 100;//数组最大容量

2.构造方法

public MyArrayList() {
      array = new String[capcity];//初始容量固定为100
}

3.扩容数组容量

//当初始容量全部用完之后会自动调用该方法扩充容量
    public void expand() {
        String[] newArr = new String[capcity * 2];
        for (int i = 0; i < capcity; i++) {
            newArr[i] = array[i];//将原数组数据拷贝到新数组
        }
        array = newArr;//改变原数组引用的指向
    }

4.添加元素的方法

//直接尾插元素
    public void add(String str) {
        if (size >= capcity) {
        //当有效元素大于等于最大容量时,调用扩容方法
            expand();
        }
        array[size++] = str;
    }
//向固定位置插入元素
    public void add(int index, String str) {
        if (index > size || index < 0) {
            System.out.println("下标不正确!!!");
            return;
        }
        if (size >= capcity) {
            expand();
        }
        for (int i = size; i > index; i--) {
        //将插入位置既之后的元素统一后移
            array[i] = array[i - 1];
        }
        array[index] = str;
        size++;
    }

5.删除元素的方法

//删除某个下标的元素
    public String remove(int index) {
        if (index > size || index < 0) {
            System.out.println("下标不正确!!!");
            return null;
        }
        String result = array[index];
        for (int i = index; i < size - 1; i++) {
        //将删除位置之后的元素统一前移一位
            array[i] = array[i + 1];
        }
        size--;
        return result;
    }
//删除固定元素
    public boolean remove(String str) {
        for (int i = 0; i < size; i++) {
        //判断元素是否等于指定元素
            if (str.equals(array[i])) {
                for (int j = i; j < size - 1; j++) {
                    array[j] = array[j + 1];
                }
                size--;
                return true;
            }
        }
        return false;
    }

6.判断顺序表中是否具有某个元素

    public boolean contains(String str) {
        for (int i = 0; i < size; i++) {
            if (str.equals(array[i])) {
                return true;
            }
        }
        return false;
    }

7.判断某个元素在顺序表中的位置

//从前向后找
 public int indexOf(String str){
        for (int i = 0; i < size; i++) {
            if (str.equals(array[i])) {
                return i;
            }
        }
        return -1;
    }
    //从后向前找
    public int lastIndexOf(String str){
        for (int i = size-1; i >=0; i--) {
            if (str.equals(array[i])) {
                return i;
            }
        }
        return -1;
    }

8.get 、set、clear方法

    public String get(int index) {
        return array[index];
    }

    public String set(int index, String str) {
        return array[index] = str;
    }

    public void clear() {
        size = 0;
    }

二、完整代码

public class MyArrayList {
    private String[] array = null;
    private int size = 0;
    private int capcity = 100;

    public MyArrayList() {
        array = new String[capcity];
    }

    @Override
    public String toString() {
        StringBuffer stringBuffer = new StringBuffer();
        stringBuffer.append("[");
        for (int i = 0; i < size; i++) {
            stringBuffer.append(array[i]);
            if (i != size - 1) {
                stringBuffer.append(",");
            }
        }
        stringBuffer.append("]");
        return stringBuffer.toString();
    }

    public void expand() {
        String[] newArr = new String[capcity * 2];
        for (int i = 0; i < capcity; i++) {
            newArr[i] = array[i];
        }
        array = newArr;
    }

    public void add(String str) {
        if (size >= capcity) {
            expand();
        }
        array[size++] = str;
    }

    public void add(int index, String str) {
        if (index > size || index < 0) {
            System.out.println("下标不正确!!!");
            return;
        }
        if (size >= capcity) {
            expand();
        }
        for (int i = size; i > index; i--) {
            array[i] = array[i - 1];
        }
        array[index] = str;
        size++;
    }

    public String remove(int index) {
        if (index > size || index < 0) {
            System.out.println("下标不正确!!!");
            return null;
        }
        String result = array[index];
        for (int i = index; i < size - 1; i++) {
            array[i] = array[i + 1];
        }
        size--;
        return result;
    }

    public boolean remove(String str) {
        for (int i = 0; i < size; i++) {
            if (str.equals(array[i])) {
                for (int j = i; j < size - 1; j++) {
                    array[j] = array[j + 1];
                }
                size--;
                return true;
            }
        }
        return false;
    }

    public boolean contains(String str) {
        for (int i = 0; i < size; i++) {
            if (str.equals(array[i])) {
                return true;
            }
        }
        return false;
    }
    public int indexOf(String str){
        for (int i = 0; i < size; i++) {
            if (str.equals(array[i])) {
                return i;
            }
        }
        return -1;
    }
    public int lastIndexOf(String str){
        for (int i = size-1; i >=0; i--) {
            if (str.equals(array[i])) {
                return i;
            }
        }
        return -1;
    }

    public String get(int index) {
        return array[index];
    }

    public String set(int index, String str) {
        return array[index] = str;
    }

    public void clear() {
        size = 0;
    }

    public static void main(String[] args) {
        MyArrayList myArrayList = new MyArrayList();
        myArrayList.add("c");
        myArrayList.add("c++");
        myArrayList.add("java");
        myArrayList.add("c");
        System.out.println(myArrayList);
        //以下是其他方法的测试,读者可自行进行测试
//        myArrayList.add(2, "python");
//        System.out.println(myArrayList);
//        myArrayList.remove(1);
//        System.out.println(myArrayList);
//        myArrayList.remove("c");
//        System.out.println(myArrayList);
//        System.out.println(myArrayList.get(0));
//        myArrayList.set(1, "hello");
//        System.out.println(myArrayList);
//        System.out.println(myArrayList.contains("c++"));
//        System.out.println(myArrayList.indexOf("c"));
//        System.out.println(myArrayList.lastIndexOf("c"));
    }
}

运行结果

[c,c++,java,c]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值