数组列表

一、数组列表是什么

二、数组列表的实现

一、数组列表是什么

  当我们创建一个数组的时候它的大小是固定的,如果要储存的个数不确定的时候,若储存空间太大,则浪费内存空间。若空间不够,则导致越界异常发生。

  而数组队列则是存多少数组,空间则多大,既不浪费内存空间,也不会导致越界发生。

  当要往数组列表中储存多个数据类型的时候。会用到一个泛型:

  在类名/接口名,写上一个<>,在<>中写一个字符串。

    泛型不是Java中的一种数据类型,只是一个特殊的字符串,可以在你不确定要储存什么类型的时候用这个字符串代替Java中的所有数据类型。当你使用的时候,你可以用对应的数据类型来代替这个字符串,这样就只能存储你指定的这一种数据类型。如果你不指定,则任意一种数据类型都可以存储。

    常用的字符串:

          E  元素;

          K,V   键,值;

二、数组列表的实现

  首先创建一个 列表的接口,用上泛型,并列好要实现的方法。

public interface list<E> {

    // 获取列表中的元素
    public E get(int index);

    // 获取列表中的元素个数
    public int length();

    // 增加一个元素
    public void add(E e);

    // 修改元素
    public void modify(int z, E e);

    // 在指定的位置添加元素
    public void addz(int z, E e);

    // 删除指定位置的元素
    public void delete(int z);

    // 合并列表
    public void merge(Object[] obj);
}

然后创建一个数组列表类,并接上列表接口

  先实现获取元素、获取元素个数两方法。

public class Arraylist<E> implements list<E> {

    int size;// 元素个数
    Object[] data;// 保存元素的数组
    static Object[] list1 = { "合并1", "合并2", "合并3", "合并4", "合并5", "合并6" };// 合并用的数组
    int z;// 下标

    // 获取列表中的元素
    public E get(int index) {

        return (E) data[index];
    }

    // 获取列表中的元素个数
    public int length() {

        return size;
    }

    // 增加一个元素
    public void add(E e) {
        
    }

    // 修改元素
    public void modify(int z, E e) {
       
    }

    // 在指定的位置添加元素
    public void addz(int z, E e) {
        
    }

    // 删除指定位置的元素
    public void delete(int z) {
        
    }

    // 合并列表
    public void merge(Object[] obj) {
       
    }
}

然后、实现增加一个元素的方法

    public void add(E e) {
        // 创建一个新的数组
        Object[] newArr = new Object[size + 1];
        // 复制原来的内容到新的数组中
        for (int i = 0; i < size; i++) {
            newArr[i] = data[i];
        }
        // 将新的数组赋值给原数组
        data = newArr;
        // 添加元素到末尾
        data[size] = e;
        size++;
    }

修改元素的方法

    public void modify(int z, E e) {
        // 指定的下标赋值
        data[z] = e;
    }

在指定的位置添加元素

    public void addz(int z, E e) {
        // 创建一个新的数组
        Object[] newArr = new Object[size + 1];
        // 旧的数组赋值给新的数组
        for (int i = 0; i < size; i++) {
            if (z <= i) {
                newArr[i + 1] = data[i];
            } else
                newArr[i] = data[i];
        }
        // 将新的数组赋值给原数组
        data = newArr;
        size++;
        //指定位置赋值
        newArr[z] = e;
    }

删除指定位置的元素

    public void delete(int z) {
        if (z < 0 || z >= size) {
            System.out.println("删除指定位置" + z + "失败:超限");
        } else {
            // 创建一个新的数组
            Object[] newArr = new Object[size - 1];
            // 遍历数组,把旧数组指定位置前面的数组储存到新数组
            for (int k = 0; k < size; k++) {
                if (k < z) {
                    newArr[k] = data[k];
                }
            }
            // 遍历数组,把旧数组指定位置后面的数组储存到新数组
            for (int i = z + 1; i < size; i++) {
                newArr[i - 1] = data[i];
            }
            // 将新的数组赋值给原数组
            data = newArr;
            size--;
        }
    }

合并列表

    public void merge(Object[] obj) {
        // 获取新数组的长度
        int a = data.length + obj.length;
        // 创建一个新的数组
        Object[] newArr = new Object[a];
        // 遍历数组 把旧数组存储到新数组
        for (int i = 0; i < size; i++) {
            newArr[i] = data[i];
        }
        // 遍历数组 把要合并的数组存储到 旧数组后面
        for (int k = 0; k < obj.length; k++) {
            newArr[k + size] = obj[k];
        }
        // 将新的数组赋值给原数组
        data = newArr;
        size = a;
    }

然后在主方法中创建列表并指定要储存的数据类型

public static void main(String[] args) {
        // 创建列表
        list<String> list = new Arraylist<>();
        // 储存数组
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        list.add("5");
        list.add("6");
        list.add("7");

        // 删除指定位置的数组
        list.delete(1);
        
        list.modify(2, "修改2下标");

        list.addz(3, "插入添加3下标");
        // 合并数组
        list.merge(list1);

        // 遍历列表
        for (int i = 0; i < list.length(); i++) {
            //打印
            System.out.println(list.get(i));
        }

    }

运行一下,看看数组列表中储存的数据

1
3
修改2下标
插入添加3下标
5
6
7
合并1
合并2
合并3
合并4
合并5
合并6

猜你喜欢

转载自www.cnblogs.com/zhangyuquan/p/10390507.html
今日推荐