@目录
先例
ArrayList的常用方法
ArrayList扩容
ArrayList添加元素到末尾
ArrayList在指定位置添加元素
ArrayList获取指定位置元素
ArrayList判空
ArrayList删除指定位置元素并将该元素返回
ArrayList清空元素
ArrayList获取元素个数
ArrayList总代码
先例
首先,我们举个例子。例如大一开学,我们班上有40位同学,我们可以定义一个数组来存储每个同学的学号。在大二时,有6位转专业的学生进入我们班级。这个时候,我们又需要去新建一个新的数组去存储数据。(原有数组在创建时,数组大小已确定,不可更改。)如果我们班之后还有新同学的加入,我们是不是又要去新建一个数组去存储。这时就会导致频繁新建数组,占用内存。这时,我们有没有其他办法去处理呢?
答案就是集合ArrayList
ArrayList的常用方法
ArrayList扩容
public void esureCapacity(int length) {
if(length>=elementData.length) {
Object[]newElementData=new Object[elementData.length+elementData.length>>1];//自动扩容为原来数组长度的1.5倍
System.arraycopy(elementData, 0, newElementData, 0, size);
elementData=newElementData;//将新建数组指向原数组的对象实现扩容操作
}
}
ArrayList添加元素到末尾
public void add(Object obj) {
esureCapacity(size+1);
elementData[size++]=obj;
}
ArrayList在指定位置添加元素
public boolean add(Object obj,int index) {
esureCapacity(size+1);//数组扩容
System.arraycopy(elementData, index, elementData, index+1, size-index);
elementData[index]=obj;
size++;
return true;
}
ArrayList获取指定位置元素
public Object get(int index) {
checkIndex(index);//检查下标是否超出范围
return elementData[index];
}
public void checkIndex(int index) {
if(index<0||index>=size) {
throw new IndexOutOfBoundsException("应该是(0~"+(size-1)+"之间)超出范围:"+index);
}
}
ArrayList判空
public boolean isEmpty() {
return size==0;
}
ArrayList删除指定位置元素并将该元素返回
public Object remove(int index) {
checkIndex(index);
Object obj=elementData[index];
System.arraycopy(elementData, index+1, elementData, index, size-index-1);
elementData[--size]=null;
return obj;
}
ArrayList清空元素
public void clear() {
for(int i=0;i<size;i++) {
elementData[--size]=null;
}
size=0;
}
ArrayList获取元素个数
public int size() {
return size;
}
总代码
package Demo1;
public class HelloArrayList {
//模拟动态数组 java.util.ArrayList(集合)底层使用对象数组存储数据
//存储数据数组-->对象数组 object[] 兼容所有的数据类型
//Object[] elementData=new Object[10];//默认创建一个长度为10的对象数组
Object[]elementData;
int size=0;//实际存储元素个数
//构造函数
public HelloArrayList() {
this(10);//调用带一个参数的构造函数
}
public HelloArrayList(int length) {
if(length<0) {
throw new IllegalArgumentException("非法长度"+length);
}
elementData=new Object[length];
}
//添加元素 末尾
public void add(Object obj) {
esureCapacity(size+1);
elementData[size++]=obj;
}
public void esureCapacity(int length) {
if(length>=elementData.length) {
Object[]newElementData=new Object[elementData.length+elementData.length>>1];
System.arraycopy(elementData, 0, newElementData, 0, size);
elementData=newElementData;
}
}
//在指定的位置添加元素
public boolean add(Object obj,int index) {
esureCapacity(size+1);//数组扩容
System.arraycopy(elementData, index, elementData, index+1, size-index);
elementData[index]=obj;
size++;
return true;
}
//判断是否为空 空元素
public boolean isEmpty() {
return size==0;
}
// public boolean isEmpty() {
// return false;
//
// }
//获取指定位置元素
public Object get(int index) {
checkIndex(index);
return elementData[index];
}
public void checkIndex(int index) {
if(index<0||index>=size) {
throw new IndexOutOfBoundsException("应该是(0~"+(size-1)+"之间)超出范围:"+index);
}
}
/**
* 删除指定位置元素并将该元素返回
*/
public Object remove(int index) {
checkIndex(index);
Object obj=elementData[index];
System.arraycopy(elementData, index+1, elementData, index, size-index-1);
elementData[--size]=null;
return obj;
}
//清空元素
public void clear() {
for(int i=0;i<size;i++) {
elementData[--size]=null;
}
size=0;
}
public int size() {
return size;
}
以下是测试类
package Demo1;
public class HelloArrayListTest {
public static void main(String[] args) {
HelloArrayList list=new HelloArrayList();
list.add(18);
list.add("谢谢关注");
list.add(99);
list.add(88);
list.add(15,4);
System.out.println("获取元素个数:"+list.size());
for(int i=0;i<list.size();i++) {
System.out.println(list.get(i));
}
System.out.println("删除索引号为1的元素:"+list.remove(1));
System.out.println("获取元素个数:"+list.size());
list.clear();
System.out.println("获取元素个数:"+list.size());
System.out.println("程序结束!");
}
}
如果有什么疑问或者缺陷不足,还请不吝赐教。谢谢!