java数据结构——顺序表(MyArrayList的实现)

目录

1.ArrayList——顺序表

 2.实现自定义的一个顺序表

(1)定义一个Mylist接口

(2)创建一个MyArrayList类


1.ArrayList——顺序表

ArrayList继承自List      ArrayList  implements List

List的特征:List当中的元素在逻辑上有先后的关系

                    每个元素都有唯一的位置与之相关联

List的方法

 2.实现自定义的一个顺序表

(1)定义一个Mylist接口

在接口当中定义出要实现的相应的抽象方法如:add(),remove(),get(),set()等

package javaDS;

public interface MyList {
    int size();
    boolean add(Long e);

    /**
     * 将 e 插入到线性表的 index 位置,从 [index, size()) 向后移
     * index 的合法下标 [0, size()]
     * 如果下标不合法:抛出一个 ArrayIndexOutOfBoundsException
     * @param index
     * @param e
     */
    void add(int index, Long e);

    /**
     * 删除 index 位置的元素
     * index 的合法下标:[0, size())
     * 如果下标不合法:抛出一个 ArrayIndexOutOfBoundsException
     * @param index
     * @return 从线性表中删除掉的元素
     */
    Long remove(int index);

    /**
     * 从前到后,删除第一个遇到的 e( equals() == true)
     * @param e
     * @return 删除成功:true,没有该元素:false
     */
    boolean remove(Long e);

    /**
     * 直接返回 index 位置的元素
     * index: [0, size())
     * @param index
     * @return
     */
    Long get(int index);

    /**
     * 使用 e 替换 index 位置的元素
     * @param index [0, size())
     * @param e
     * @return 原来 index 位置的元素
     */
    Long set(int index, Long e);

    /**
     * 返回第一次遇到 e 的下标(equals() == true)
     * @param e
     * @return 如果没有找到,返回 -1
     */
    int indexOf(Long e);

    /**
     * 从后往前,返回第一次遇到 e 的下标(equals() == true)
     * @param e
     * @return 如果没有找到,返回 -1
     */
    int lastIndexOf(Long e);

    /**
     * 线性表中是否包含 e(equals)
     * @param e
     * @return
     */
    boolean contains(Long e);

    /**
     * 清空线性表
     */
    void clear();

    /**
     * 判断线性表是否是空的(empty) 等价于一个元素都没有
     * @return
     */
    boolean isEmpty();
}

(2)创建一个MyArrayList类

再自己的MyArrayList类当中去去一个个实现定义好的接口当中的抽象方法

(1)将MyArrayList与MyList接口进行连接

(2)先定义好Array数组来存储相应的元素

(3)实现不同的构造方法(有参    无参)

(4)重写接口当中的各种方法

(5)写主函数进行调试和测试

package javaDS;

import java.sql.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class MyArrayList implements MyList {
    private Long [] Array;
    int size;
    public MyArrayList(){
        this.size=0;
        this.Array=new Long[20];
    }

    @Override
    public String toString() {
        return "MyArrayList{" +
                "Array=" + Arrays.toString(Array) +
                ", size=" + size +
                '}';
    }

    public MyArrayList(int initialCapacity){
        this.size=0;
        this.Array=new Long[initialCapacity];
    }
    @Override
    public int size() {
        return size;
    }

    @Override
    public boolean add(Long e) {
        Array[size]=e;
        size++;
        return true;
    }

    @Override
    public void add(int index, Long e) {
        if(index<0|index>size){
            throw new ArrayIndexOutOfBoundsException("插入下标有误!");
        }
        for (int i = size-1; i >=index ; i--) {
            Array[i+1]=Array[i];
        }
        Array[index]=e;
        size++;
    }

    @Override
    public Long remove(int index) {
        if(index<0||index>=size){
            throw new ArrayIndexOutOfBoundsException("删除下标有误!");
        }
        else if(Array[index]==null) {
            return null;
        }
        Long e=Array[index];
        for (int i = index+1; i <size ; i++) {
            Array[i-1]=Array[i];
        }
        Array[size-1]=null;
        size--;
        return  e;//返回删除的元素
    }

    @Override
    public boolean remove(Long e) {
        for (int i = 0; i <size ; i++) {
            if(Array[i]==e){
                for (int j = i+1; j <size ; j++) {
                    Array[j-1]=Array[j];
                }
                Array[size-1]=null;
                size--;
                return true;
            }
        }
        return false;
    }

    @Override
    public Long get(int index) {
        if(index<0||index>=size){
            throw new ArrayIndexOutOfBoundsException("删除下标有误!");
        }
        return Array[index];
    }

    @Override
    public Long set(int index, Long e) {
        if(index<0||index>=size){
            throw new ArrayIndexOutOfBoundsException("删除下标有误!");
        }
        Long old=Array[index];
        Array[index]=e;
        return old;
    }

    @Override
    public int indexOf(Long e) {
        for (int i = 0; i < size; i++) {
            if(Array[i]==e){
                return i;
            }
        }
        return -1;
    }

    @Override
    public int lastIndexOf(Long e) {
        for (int i = size-1; i >=0 ; i--) {
            if(Array[i]==e){
                return i;
            }
        }
        return -1;
    }

    @Override
    public boolean contains(Long e) {
        for (int i = 0; i < size; i++) {
            if (Array[i]==e) {
                return true;
            }
        }
        return false;
    }

    @Override
    public void clear() {
        for (int i = 0; i < size; i++) {
            Array[i]=null;
        }
    }

    @Override
    public boolean isEmpty() {
        if(size==0){
            return true;
        }
        return false;
    }

    public static void main(String[] args) {
        MyArrayList myArrayList=new MyArrayList();
        myArrayList.add(10L);
        myArrayList.add(20L);
        myArrayList.add(30L);
        myArrayList.add(40L);
        myArrayList.add(50L);
        System.out.println(myArrayList.toString());
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用泛型实现MyArrayList类的示例代码: ```java public class MyArrayList<E> { private static final int DEFAULT_CAPACITY = 10; private int size; private E[] elements; public MyArrayList() { elements = (E[]) new Object[DEFAULT_CAPACITY]; } public MyArrayList(int capacity) { elements = (E[]) new Object[capacity]; } public void add(E e) { if (size == elements.length) { resize(); } elements[size++] = e; } public E get(int index) { checkIndex(index); return elements[index]; } public void set(int index, E e) { checkIndex(index); elements[index] = e; } public E remove(int index) { checkIndex(index); E element = elements[index]; for (int i = index; i < size - 1; i++) { elements[i] = elements[i + 1]; } elements[--size] = null; return element; } public boolean contains(E e) { for (int i = 0; i < size; i++) { if (elements[i].equals(e)) { return true; } } return false; } public int size() { return size; } public boolean isEmpty() { return size == 0; } private void resize() { E[] newElements = (E[]) new Object[elements.length * 2]; System.arraycopy(elements, 0, newElements, 0, size); elements = newElements; } private void checkIndex(int index) { if (index < 0 || index >= size) { throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size); } } } ``` 使用示例: ```java MyArrayList<String> list = new MyArrayList<>(); list.add("hello"); list.add("world"); System.out.println(list.get(0)); // output: hello list.set(1, "java"); System.out.println(list.get(1)); // output: java System.out.println(list.remove(0)); // output: hello System.out.println(list.contains("java")); // output: true System.out.println(list.size()); // output: 1 System.out.println(list.isEmpty()); // output: false ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值