java自定义数组的类 实现添加 删除 修改和获得长度的操作
时间: 2024-03-25 10:35:19 浏览: 110
java拼接字节数组轻量高效实现Mybytes
好的,我可以帮你解答这个问题。
首先,我们需要定义一个自定义数组类,可以使用以下代码:
```java
public class MyArray {
private int[] data;
private int size;
public MyArray(int capacity) {
data = new int[capacity];
size = 0;
}
public MyArray() {
this(10);
}
public int getSize() {
return size;
}
public int getCapacity() {
return data.length;
}
public boolean isEmpty() {
return size == 0;
}
public void add(int index, int e) {
if (index < 0 || index > size)
throw new IllegalArgumentException("Add failed. Index is illegal.");
if (size == data.length)
resize(2 * data.length);
for (int i = size - 1; i >= index; i--)
data[i + 1] = data[i];
data[index] = e;
size++;
}
public void addLast(int e) {
add(size, e);
}
public void addFirst(int e) {
add(0, e);
}
public int get(int index) {
if (index < 0 || index >= size)
throw new IllegalArgumentException("Get failed. Index is illegal.");
return data[index];
}
public void set(int index, int e) {
if (index < 0 || index >= size)
throw new IllegalArgumentException("Set failed. Index is illegal.");
data[index] = e;
}
public boolean contains(int e) {
for (int i = 0; i < size; i++)
if (data[i] == e)
return true;
return false;
}
public int find(int e) {
for (int i = 0; i < size; i++)
if (data[i] == e)
return i;
return -1;
}
public int remove(int index) {
if (index < 0 || index >= size)
throw new IllegalArgumentException("Remove failed. Index is illegal.");
int ret = data[index];
for (int i = index + 1; i < size; i++)
data[i - 1] = data[i];
size--;
if (size == data.length / 4 && data.length / 2 != 0)
resize(data.length / 2);
return ret;
}
public int removeFirst() {
return remove(0);
}
public int removeLast() {
return remove(size - 1);
}
public void removeElement(int e) {
int index = find(e);
if (index != -1)
remove(index);
}
private void resize(int newCapacity) {
int[] newData = new int[newCapacity];
for (int i = 0; i < size; i++)
newData[i] = data[i];
data = newData;
}
@Override
public String toString() {
StringBuilder res = new StringBuilder();
res.append(String.format("Array: size = %d , capacity = %d\n", size, data.length));
res.append('[');
for (int i = 0; i < size; i++) {
res.append(data[i]);
if (i != size - 1)
res.append(", ");
}
res.append(']');
return res.toString();
}
}
```
上述代码中,我们定义了一个 `MyArray` 类,包括以下成员变量和方法:
- `data`:用来存放数组元素的数组;
- `size`:当前数组中有效元素的个数;
- `MyArray(int capacity)`:构造函数,创建一个容量为 `capacity` 的数组;
- `MyArray()`:无参构造函数,创建一个默认容量为 10 的数组;
- `getSize()`:获取当前数组中有效元素的个数;
- `getCapacity()`:获取当前数组的容量;
- `isEmpty()`:判断当前数组是否为空;
- `add(int index, int e)`:在指定位置插入一个元素;
- `addLast(int e)`:在数组末尾插入一个元素;
- `addFirst(int e)`:在数组头部插入一个元素;
- `get(int index)`:获取指定位置的元素;
- `set(int index, int e)`:修改指定位置的元素;
- `contains(int e)`:判断数组中是否包含指定元素;
- `find(int e)`:查找指定元素的下标,若不存在则返回 -1;
- `remove(int index)`:移除指定位置的元素;
- `removeFirst()`:移除数组头部的元素;
- `removeLast()`:移除数组末尾的元素;
- `removeElement(int e)`:移除数组中第一个与指定元素相等的元素;
- `resize(int newCapacity)`:调整数组的容量;
- `toString()`:将数组转化为字符串形式。
这个自定义数组类实现了添加、删除、修改和获得长度的操作。你可以根据需要进行调用。
阅读全文