动态数组实现

动态数组

动态数组的特点

逻辑结构:线性的

物理结构:顺序结构

申请内存:一次申请一大段连续的空间,一旦申请到了,内存就固定了。

存储特点:所有数据存储在这个连续的空间中,数组中的每一个元素都是一个具体的数据(或对象),所有数据都紧密排布,不能有间隔。

动态数组的基本操作

与数据结构相关的数据操作:

  • 插入
  • 删除
  • 修改
  • 查找
  • 遍历
public interface Container<E> extends Iterable<E>{
   
	void add(E e);
	void insert(int index,E value);
	void delete(E e);
	void delete(int index);
	E update(int index, E value);
	void update(E old, E value);
	boolean contains(E e);
	int indexOf(E e);
	E get(int index);
	Object[] getAll();
	int size();
}

动态数组实现

import java.util.Arrays;
import java.util.Iterator;
import java.util.NoSuchElementException;

public class MyArrayList<E> implements Container<E>{
   
	private Object[] all;
	private int total;
	
	public MyArrayList(){
   
		all = new Object[5];
	}

	@Override
	public void add(E e) {
   
		ensureCapacityEnough();
		all[total++] = e;
	}

	private void ensureCapacityEnough() {
   
		if(total >= all.length){
   
			all = Arrays.copyOf(all, all.length*2);
		}
	}

	@Override
	public void insert(int index, E value) {
   
		//是否需要扩容
		ensureCapacityEnough();
		addCheckIndex(index);
		if(total-index>0) {
   
			System.arraycopy(all, index, all, index+1, total-index);
		}
		all[index]=value;
		total++;
	}

	private void addCheckIndex(int index) {
   
		if(index<0 || index>total){
   
			throw new IndexOutOfBoundsException(index+"越界");
		}
	}

	@Override
	public void delete(E e) {
   
		int index = indexOf(e
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明月常新

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值