java 动态数组_java动态数组

//二、自定义数组(动态数组),比自带的数组功能更多,使用方法更灵活。//增删改查public class CustomizedArray {

private int[] data;//存储数据 private int size;//数组中实际数据个数,和data.length不是一回事。可以理解为下一个可以存放元素的下标。

// 构造函数,根据传入数组的容量capacity构造Array public CustomizedArray(int capacity){

data = new int[capacity];

size = 0;//刚创建时有效元素个数就是0 }

// 无参数的构造函数,默认数组的容量capacity=10 public CustomizedArray(){

this(10);//相当于调用CustomizedArray(10) }

// 获取数组的容量 public int getCapacity(){

return data.length;

}

// 获取数组中的元素个数 public int getSize(){

return size;

}

// 返回数组是否为空 public boolean isEmpty(){

return size == 0;

}

// 在index索引的位置插入一个新元素e //思路:如果index位置后面有元素,那么index位置及其之后的所有元素都要往后移动一位 //所以要先判断是否能移动(是否满),以及index的位置是否合法 //假设size为7,那么在0~6号位置已经有了元素,那么可以插入的位置有0~7,其它位置不可以插入

public void add(int index, int e){

if(size == data.length)//数组已满 throw new IllegalArgumentException("Add failed. Array is full.");

if(index < 0 || index > size)//插入位置不合法 throw new IllegalArgumentException("Add failed. Require index >= 0 and index <= size.");

//后移:size - 1才是最后一个元素的数组下标,所以从size - 1位置到index位置的所有元素后移 for(int i = size - 1; i >= index ; i --)

data[i + 1] = data[i];//顺序后移

data[index] = e;//插入元素 size ++;//有效元素个数加一 }

//给数组增加元素 // 向所有元素后添加一个新元素 public void addLast(int e){

add(size, e);//目前有size个有效元素,下一个可以存放元素的下标是size。 }

// 在所有元素前添加一个新元素 public void addFirst(int e){

add(0, e);

}

// 获取index索引位置的元素 public int get(int index){

if(index < 0 || index >= size)

throw new IllegalArgumentException("Get failed. Index is illegal.");

return data[index];

}

// 修改index索引位置的元素为e public void set(int index, int e){

if(index < 0 || index >= size)

throw new IllegalArgumentException("Set failed. Index is illegal.");

data[index] = e;

}

// 查找数组中是否有元素e public boolean contains(int e){

for(int i = 0 ; i < size ; i ++){

if(data[i] == e)

return true;

}

return false;

}

// 查找数组中元素e所在的索引,如果不存在元素e,则返回-1 public int find(int e){

for(int i = 0 ; i < size ; i ++){

if(data[i] == e)

return i;

}

return -1;

}

// 从数组中删除index位置的元素, 返回删除的元素 public int remove(int index){

if(index < 0 || index >= size)

throw new IllegalArgumentException("Remove failed. Index is illegal.");

//因为要返回删除的元素,所以要先存储下来 int ret = data[index];

//删除index位置的元素,那么index+1~size-1的所有位置的元素都要往前移动 for(int i = index + 1 ; i < size ; i ++)

data[i - 1] = data[i];//顺序前移 size --;//有效元素个数减一 return ret;

}

// 从数组中删除第一个元素, 返回删除的元素 public int removeFirst(){

return remove(0);

}

// 从数组中删除最后一个元素, 返回删除的元素 public int removeLast(){

return remove(size - 1);

}

// 从数组中删除元素e public void removeElement(int e){

//先查找元素e在数组中的索引,找不到则为-1 int index = find(e);

if(index != -1)//找到了该元素的索引 remove(index);//调用remove函数进行删除 }

@Override

public String toString(){

StringBuilder res = new StringBuilder();

res.append(String.format("Array: size = %d , capacity = %d\n", size, data.length));

res.append('[');

for(int i = 0 ; i < size ; i ++){

res.append(data[i]);

if(i != size - 1)//只要不是最后一个元素,那么在输出每个元素时,添加一个“,”隔开 res.append(", ");

}

res.append(']');

return res.toString();

}

public static void main(String[] args) {

CustomizedArray arr = new CustomizedArray(20);

for(int i = 0 ; i < 10 ; i ++)

arr.addLast(i);

System.out.println(arr);

//[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] arr.add(1, 100);

System.out.println(arr);

//[0, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9] arr.addFirst(-1);

System.out.println(arr);

// [-1, 0, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9]

arr.remove(2);

System.out.println(arr);

//[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

arr.removeElement(4);

System.out.println(arr);

//[-1, 0, 1, 2, 3, 5, 6, 7, 8, 9]

arr.removeFirst();

System.out.println(arr);

//[0, 1, 2, 3, 5, 6, 7, 8, 9]

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值