Java 简单实现数组

简单实现数组

public class Array<E> {
    private E[] array;
    private int size;

    //无参构造函数,默认容量为10
    public Array(){
       this(10);
    }
    //有参构造函数
    public Array(int capacity){
        array = (E[])new Object[capacity];
    }

    //插入元素
    public void add(E e){
        array[size++] = e;
    }

    //删除元素
    public E remove(int index){
        E arr = array[index];
        for(int i = index;i < size;i++)
            array[i] = array[i+1];
        size--;
        return arr;
    }

    //是否有该元素
    public boolean contains(E e){
        for(int i = 0;i < size; i++){
            if(array[i].equals(e))
                return true;
        }
        return false;
    }

    //查询该元素下标 没有返回-1
    public int indexOf(E e){
        for(int i = 0;i < size;i++)
            if(array[i] == e)
                return i;
        return -1;
    }

    //获取index元素
    public E get(int index){
        if(index < 0|| index >= size)
            throw new IllegalArgumentException();
        return array[index];
    }

    //判空
    public boolean isEmpty(){
        return size==0;
    }

    //长度
    public int size(){
        return size;
    }
    
<think>我们正在处理一个关于Java数组添加元素的问题。从引用资料来看,我们知道Java数组的大小是固定的,不能直接添加元素。因此,我们需要通过创建新数组并复制元素的方式来实现添加元素。 引用[1]明确指出Java数组大小固定,不能直接添加元素。引用[2][3][4][5]则提供了具体的实现方法,这些方法的核心思路是: 1. 创建一个比原数组长度大1的新数组。 2. 将原数组的元素复制到新数组。 3. 将新元素添加到新数组的末尾(或指定位置)。 4. 将新数组赋值给原数组引用(如果需要替换原数组)。 此外,引用[5]还展示了两种具体的实现方式:使用Arrays.copyOf和使用System.arraycopy,并且还演示了在添加元素后对数组进行排序。 根据这些信息,我们可以总结几种方法,并给出示例代码。 注意:用户要求用中文回答,并且按照之前的指令,数学表达式要使用$...$格式(虽然这个问题中可能用不到数学表达式,但要注意其他规则)。 我们将提供以下内容: 1. 方法概述 2. 具体实现示例(包括基本方法和使用工具类的方法) 3. 注意事项 然后,按照要求生成相关问题。 </think> ### Java实现数组添加新元素的方法 在Java中,数组的长度是固定的(由`int[] arr = new int[3];`定义后长度不可变)[^1]。因此,添加新元素需通过**创建新数组+复制元素**实现。以下是三种核心方法: --- #### **方法1:手动创建新数组(基础实现)** 1. **创建新数组**:长度 = 原数组长度 + 1 2. **复制元素**:遍历原数组,复制到新数组 3. **添加新元素**:将新元素放入新数组末尾 4. **替换引用**:将原数组指向新数组 ```java int[] arr = {1, 2, 3}; int newElement = 4; // 创建新数组(长度+1) int[] newArr = new int[arr.length + 1]; // 复制原数组元素 for (int i = 0; i < arr.length; i++) { newArr[i] = arr[i]; } // 添加新元素到末尾 newArr[arr.length] = newElement; // 替换原数组引用 arr = newArr; System.out.println(Arrays.toString(arr)); // 输出: [1, 2, 3, 4] ``` --- #### **方法2:使用 `Arrays.copyOf()`(推荐简洁版)** 利用 `java.util.Arrays` 工具类简化复制过程: ```java import java.util.Arrays; int[] arr = {1, 2, 3}; int newElement = 4; // 复制原数组并扩容 int[] newArr = Arrays.copyOf(arr, arr.length + 1); // 添加新元素 newArr[arr.length] = newElement; arr = newArr; System.out.println(Arrays.toString(arr)); // [1, 2, 3, 4] ``` --- #### **方法3:使用 `System.arraycopy()`(高效复制)** 适用于需控制复制位置或性能敏感场景: ```java int[] arr = {1, 2, 3}; int newElement = 4; int[] newArr = new int[arr.length + 1]; // 参数: (原数组, 原数组起始位, 目标数组, 目标起始位, 复制长度) System.arraycopy(arr, 0, newArr, 0, arr.length); newArr[arr.length] = newElement; arr = newArr; System.out.println(Arrays.toString(arr)); // [1, 2, 3, 4] ``` --- #### **关键注意事项** 1. **空间复杂度**:每次添加需创建新数组,时间复杂度为 $O(n)$。 2. **插入位置**:上述示例添加到末尾;若需插入中间(如索引`k`处),需调整复制逻辑: ```java // 在索引k处插入元素 for (int i = 0; i < k; i++) newArr[i] = arr[i]; // 复制前半段 newArr[k] = newElement; // 插入新元素 for (int i = k; i < arr.length; i++) newArr[i+1] = arr[i]; // 复制后半段 ``` 3. **实际应用**:频繁添加操作建议改用 `ArrayList`(动态扩容)[^2]。 --- ### 总结 | **方法** | 优点 | 适用场景 | |-------------------|--------------------------|------------------| | 手动创建新数组 | 无需额外依赖 | 简单少量操作 | | `Arrays.copyOf()` | 代码简洁 | 快速实现扩容 | | `System.arraycopy()` | 高性能,可控制复制细节 | 大数据量或中间插入 | > ℹ️ 动态数组结构如 `ArrayList` 内部正是通过 `System.arraycopy()` 实现自动扩容[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值