JAVA中集合ArrayList的简单实现

@目录

先例

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("程序结束!");
	}
}

如果有什么疑问或者缺陷不足,还请不吝赐教。谢谢!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值