Java 自定义动态数组方式

  

Java中没有内置的动态数组类,需要我们自己实现。下面是Java自定义动态数组的完整攻略。

需求分析

我们需要实现一个具有动态扩容功能的数组。当数组空间不够时,需要动态扩充,保证数据能够正常存储。

实现步骤

  1. 定义一个数组类,包含数组容量大小、元素个数和数组本身三个属性。

java
public class CustomArray<T> {
private int capacity;
private int size;
private T[] data;
}

  1. 实现构造函数,在构造函数中初始化数组大小和容量。

java
public CustomArray(int capacity){
this.capacity = capacity;
this.size = 0;
this.data = (T[])new Object[capacity];
}

  1. 实现动态扩容功能。当数组大小超出容量时,需要对数组进行扩容。

```java
private void resize(int newCapacity){
T[] newData = (T[])new Object[newCapacity];
for(int i = 0; i < size; i++){
newData[i] = data[i];
}
data = newData;
capacity = newCapacity;
}

public void add(T ele){
if(size == capacity){
resize(capacity * 2);
}
data[size++] = ele;
}
```

上面的代码中,resize方法用于对数组进行扩容,add方法用于向数组中添加元素。如果数组已满,就先调用resize方法扩容。

  1. 实现获取元素和设置元素的方法。

```java
public T get(int index){
if(index < 0 || index >= size){
throw new IllegalArgumentException("Index is illegal.");
}
return data[index];
}

public void set(int index, T ele){
if(index < 0 || index >= size){
throw new IllegalArgumentException("Index is illegal.");
}
data[index] = ele;
}
```

上面的代码中,get方法用于获取特定索引位置的元素,set方法用于设置特定索引位置的元素。

  1. 实现获取元素个数、容量大小和判断数组空和满的方法。

```java
public int getSize(){
return size;
}

public int getCapacity(){
return capacity;
}

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

public boolean isFull(){
return size == capacity;
}
```

上面的代码中,getSize方法用于获取元素个数,getCapacity方法用于获取数组容量大小,isEmpty方法用于判断数组是否为空,isFull方法用于判断数组是否已满。

示例说明

下面给出两个使用Java自定义动态数组类的示例。

示例1:对自定义数组进行排序

CustomArray<Integer> arr = new CustomArray<>(10);
arr.add(3);
arr.add(1);
arr.add(2);
arr.add(5);
arr.add(4);

Arrays.sort(arr.data, 0, arr.getSize());
for(int i = 0; i < arr.getSize(); i++){
    System.out.println(arr.get(i));
}

上述代码中,首先创建自定义数组类,并向其中添加了五个元素。然后使用Arrays类中的sort方法对数组进行排序,最后遍历输出数组元素。

示例2:求自定义数组的平均值

CustomArray<Integer> arr = new CustomArray<>(10);
arr.add(3);
arr.add(1);
arr.add(2);
arr.add(5);
arr.add(4);

int sum = 0;
for(int i = 0; i < arr.getSize(); i++){
    sum += arr.get(i);
}

double avg = sum / (double)arr.getSize();
System.out.println(avg);

上述代码中,首先创建自定义数组类,并向其中添加了五个元素。然后使用循环遍历数组,求得数组元素的和。最后计算数组的平均值并输出。

相关文章