JAVA实现动态数组

package com.atgiugu.com;

import java.util.Arrays;

public class MyArrayList {
	
	private Object[] data;  //内部用一个数组来存储传进来的参数
	private int total;  //用来记录数组中有多少元素
	
	public MyArrayList() {
		data = new Object[5];  //创建数组对象
	}
	
	//添加一个元素
	public void add(Object obj) {
		//如果data已存满,就把容量扩充为原来的两倍
		CheckCapacityIsOutOfBounds();
		data[total++] = obj;  //将新添加进来的元素放到data数组中
	}
	//检查数组容量是否够用
	protected void CheckCapacityIsOutOfBounds() {
		if(total > data.length) {
			data = Arrays.copyOf(data, data.length*2);  //copyof将data数组容量扩充为原来的两倍
		}
	}
	
	//返回数组中的元素个数
	public int size() {
		return total;
	}
	
	//返回数组的实际容量
	public int capacity() {
		return data.length;
	}
	
	//获取[index]位置的元素
	public Object get(int index) {
		CheckIndexIsOutOfBounds(index);
		return data[index];
	}
	
	//替换[index]上的元素
	public void set(int index, Object obj) {
		CheckIndexIsOutOfBounds(index);
		data[index] = obj;
	}
	
	//检查下标是否越界
	protected void CheckIndexIsOutOfBounds(int index) {
		if(index < 0 || index > total) {
			throw new IndexOutOfBoundsException("下标越界");
		}
	}
	
	//在[index]位置插入一个元素value
	public void insert(int index, Object value) {
		//检查下标是否越界
		CheckIndexIsOutOfBounds(index);
		//检查数组容量是否够用
		CheckCapacityIsOutOfBounds();
		//index及其后面的元素往后挪
		System.arraycopy(data, index, data, index+1, total-index);
		//index位置插入元素value
		data[index] = value;
		//数组总长度加一
		total++;
	}
	
	//返回实际存储的所有元素
	public Object[] getAll() {
		return Arrays.copyOf(data, total);  //copyOf将data复制成一个total长度的新对象数组
	}
	
	//删除index位置的元素
	public void delete(int index) {
		//检查下标是否越界
		CheckIndexIsOutOfBounds(index);
		//index+1及其后面的元素依次向前移动
		System.arraycopy(data, index+1, data, index, total-index-1);
		//数组元素减一
		total--;
		//数组末尾元素置为null
		data[total] = null;
	}
	
	//查询某个元素的下标
	public int indexOf(Object value) {
		if(value == null) {
			for (int i = 0; i < total; i++) {
				if(data[i] == null) {
					return i;
				}
			}
		}else {
			for (int i = 0; i < total; i++) {
				if(value.equals(data[i])) {
					return i;
				}
			}
		}
		return -1;
	}
	
	//删除数组中的某个元素  如果有多个  那就删除第一个
	public void delete(Object value) {
		//查询value元素的下标
		int index = indexOf(value);
		//如果存在这个元素  用delete方法删除掉
		if(index != -1) {
			delete(index);
		}
		
		throw new RuntimeException("搜索元素不存在");
	}
	
	//将某元素替换成传进来的元素
	public void set(Object obj, Object value) {
		//查询是否存在obj元素
		int index = indexOf(obj);
		//如果存在就替换
		set(index, value);
		
		//如果没有就抛出异常
		throw new RuntimeException("没有找到被替换元素");
	}
	
}
package com.atgiugu.com;

import java.util.Arrays;

public class TestMyArrayList {
	public static void main(String[] args) {
		MyArrayList m = new MyArrayList();
		
		m.add("张三");
		m.add("李四");
		m.add("王五");
		Object[] all = m.getAll();
		
		for(int i=0; i < all.length; i++) {
			System.out.println(all[i]);
		}
		
	}
	
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值