用Java的基本语法和基本面向对象模拟出ArrayList数组的实现
什么是ArrayList数组
ArrayList数组简单来说就是一个动态数组,通俗点说ArrayList就是一个任意长度的数组。
ArrayList数组的实现概述
Java中ArrayList的实现是基于数组+数组拷贝完成
定义数组
首先定义一个用于存储数据的真实数组数组,并构造他的初始容量为5
/**用于存储数据的真实数组*/
private Goods[] arr;
/**数组中元素目前的索引位置*/
private int index;
/**
* 构造一个指定长度的数组
* @param capacity
*/
public MyArrayList(int capacity) {
arr = new Goods[capacity];
}
向数组里面添加元素,并判断容量是否超出
/**
* 添加元素
* @param g
*/
public void add(Goods g) {
//检测容量是否足够
ensureCapacity();
arr[index++] = g;
}
判断容量是否超出,如果超出容量增长
/**
* 确认容量是否足够
*/
private void ensureCapacity() {
if(index >= arr.length) {
//容量超出
grow();
}
}
/**
* 容量增长
*/
private void grow() {
//获取原数组的长度
int len = arr.length;
//创建临时的数长度为原始数组的1.5倍
Goods[] temp = new Goods[len + (len >> 1)];
//数组拷贝
System.arraycopy(arr, 0, temp, 0, len);
//将原数组的指针指向新数组地址
arr = temp;
}
最后再获取指定的元素位置并且返回元素的总个数
/**
* 获取指定位置的元素
* @param i
* @return
*/
public Goods get(int i) {
return arr[i];
}
/**
* 返回元素的总个数
* @return
*/
public int size() {
return index;
}
最最后再添加移除元素的功能
public void remove(int i) {
System.arraycopy(arr, i+1, arr, i, arr.length - (i + 1));
index--;
}
小结一下
就这样一个简简单单的ArrayList数组就完美的呈现出来了,虽然对我们来说根本用不上,但是其目的是为了让大家知道Arraylist具体是一个怎样的实现过程,看了这个你是不是对ArrayList数组的了解又加深了一步呢?