信息发布→ 登录 注册 退出

Java 数据结构与算法系列精讲之数组

发布时间:2026-01-11

点击量:
目录
  • 概述
  • 数组
    • 声明数组的两个方法
    • 创建数组的两个方法
  • 索引
    • 自定义数组
      • 泛型
      • 构造函数
      • 元素操作
      • 调用
      • 完整代码

    概述

    从今天开始, 小白我将带大家开启 Jave 数据结构 & 算法的新篇章.

    数组

    数组 (Array) 是有序数据的集合, 在 Java 中 java.util.Arrays包含用来操作数组的各种方法, 比如排序和搜索等. 其所有方法均为静态方法, 调用起来非常简单.

    声明数组的两个方法

    方法一:

    数据类型[] array;

    方法二:

    数据类型 array[];

    创建数组的两个方法

    方法一:

    数据类型[] array = new 数据类型[n];

    int[] array = new int[10];

    方法二:

    数据类型[] arrray = {value1, value2, ...}

    int[] array = new int[10];

    索引

    索引 (Index) 可以帮助我们定位到想要的数据, 大幅提高数据的检索速度.

    自定义数组

    泛型

    <E>示一种指定的数据类型, 叫做泛型. E, 取自 Element (元素) 的首字母. 在出现 E 的地方, 我们使用一种引用数据类型将其替换即可, 表示我们将存储哪种引用类型的元素.

    构造函数

    // 有参构造
    public Array(int capacity){
        data =  (E[]) new Object[capacity];
        size = 0;
    }
    
    // 无参构造
    public Array(){
        this(10);
    }
    

    元素操作

    // 头部添加元素
    public void addFirst(E element){
       // 如果超过数组最大容量, 扔出异常
       if(size == data.length){
            throw new RuntimeException("array is full!");
        }
    
        // 列表所有index及元素后移
        for (int i = size - 1; i >= 0; i--) {
            data[i + 1] = data[i];
        }
    
        // 数组第size个赋值为element
        data[0] = element;
    
        // 数组大小+1
        size++
    }
    
    // 尾部添加元素
    public void addLast(E element){
        // 如果超过数组最大容量, 扔出异常
        if(size == data.length){
            throw new RuntimeException("array is full!");
        }
    
        // 数组第size个赋值为element
        data[size] = element;
    
        // 数组大小+1
        size++;
    }
    
    // 通过索引添加元素
    public void add(int index, E element){
    
        // 如果超过数组最大容量, 扔出异常
        if(size == data.length){
            throw new RuntimeException("reached max capacity");
        }
    
        if(index < 0 || index > size){
            throw new RuntimeException("invalid index");
        }
    
        // 列表所有index及以后的元素后移
        for (int i = size-1; i >=index; i--) {
            data[i + 1] = data[i];
        }
        data[index] = element;
        size++;
    }
    

    调用

    public static void main(String[] args) {
    
        // 创建数组
        Array array = new Array(10);
    
        // 尾部添加
        array.addLast(2);
        array.addLast(3);
        array.addLast(4);
        System.out.println(array.toString());
    
        // 头部添加
        array.addFirst(1);
        array.addFirst(0);
        System.out.println(array.toString());
    
        // 通过index添加元素
        array.add(0, -1);
        array.add(6, 5);
        System.out.println(array.toString());
    }
    

    输出结果:

    Array{data=[2, 3, 4, null, null, null, null, null, null, null]}
    Array{data=[0, 1, 2, 3, 4, null, null, null, null, null]}
    Array{data=[-1, 0, 1, 2, 3, 4, 5, null, null, null]}

    完整代码

    import java.util.Arrays;
    
    public class Array<E> {
        private E[] data;  // 存放数据
        private int size;  // 存放数组元素个数
    
        // 有参构造
        public Array(int capacity){
            data = (E[]) new Object[capacity];
            size = 0;
        }
    
        // 无参构造
        public Array(){
            this(10);
        }
    
        // 获取数组容量
        public int getCapacity(){
            return data.length;
        }
    
        // 获取数组元素个数
        public int getSize(){
            return size;
        }
    
        // 判断数组是否为空
        public boolean isEmpty(){
            return size == 0;
        }
    
        // 头部添加元素
        public void addFirst(E element){
            // 如果超过数组最大容量, 扔出异常
            if(size == data.length){
                throw new RuntimeException("array is full!");
            }
    
            // 列表所有index及元素后移
            for (int i = size - 1; i >= 0; i--) {
                data[i + 1] = data[i];
            }
    
            // 数组第size个赋值为element
            data[0] = element;
    
            // 数组大小+1
            size++;
        }
    
        // 尾部添加元素
        public void addLast(E element){
            // 如果超过数组最大容量, 扔出异常
            if(size == data.length){
                throw new RuntimeException("array is full!");
            }
    
    
            // 数组第size个赋值为element
            data[size] = element;
    
            // 数组大小+1
            size++;
        }
        
        // 通过索引添加元素
        public void add(int index, E element){
    
            // 如果超过数组最大容量, 扔出异常
            if(size == data.length){
                throw new RuntimeException("reached max capacity");
            }
    
            if(index < 0 || index > size){
                throw new RuntimeException("invalid index");
            }
    
            // 列表所有index及以后的元素后移
            for (int i = size-1; i >=index; i--) {
                data[i + 1] = data[i];
            }
            data[index] = element;
            size++;
        }
    
        @Override
        public String toString() {
            return "Array{" +
                    "data=" + Arrays.toString(data) +
                    '}';
        }
    
        public static void main(String[] args) {
    
            // 创建数组
            Array array = new Array(10);
    
            // 尾部添加
            array.addLast(2);
            array.addLast(3);
            array.addLast(4);
            System.out.println(array.toString());
    
            // 头部添加
            array.addFirst(1);
            array.addFirst(0);
            System.out.println(array.toString());
    
            // 通过index添加元素
            array.add(0, -1);
            array.add(6, 5);
            System.out.println(array.toString());
        }
    }
    在线客服
    服务热线

    服务热线

    4008888355

    微信咨询
    二维码
    返回顶部
    ×二维码

    截屏,微信识别二维码

    打开微信

    微信号已复制,请打开微信添加咨询详情!