数组添加元素这里不太懂

来源:2-3 向数组中添加元素

慕粉3884565

2018-11-18

private int[] data;
//容量
private int size;

//构造函数,传入数组的容量capacity构造Array
public Array(int capacity){
	data = new int[capacity];
	size=0;
}
// 无参数的构造函数,默认数组的容量capacity=10
public Array(){
	this(10);
}
//获取数组的容量
public int getCapacity(){
	return data.length;
}
//获取容量
public int getSize(){
	return size;
}
//数组是否为空
public boolean isEmpty(){
	return data==null;
}

//向所有元素前添加一个新元素
public void addFirst(int e){
	add(0,e);
}
//向所有元素后添加一个新元素
public void addLast(int e){
	add(size,e);
}
//在index索引的位置
插入一个新元素e
public void add(int index,int e){
	System.out.println("add");
	if(size==data.length){
		throw new IllegalArgumentException("容量已满");
	}
	if(index<0 || index>size){
		throw new IllegalArgumentException("index<0 or index>size");
	}
	for(int i=size-1;i>=index;i--){
		System.out.println("1add");
		System.out.println("===>"+i);
		data[i+1]=data[i];
	}
	data[index]=e;
	size++;
}

}

为什么进入不了for循环

还有我不明白size-1为什么要-1
size是容量

写回答

1回答

liuyubobobo

2018-11-18

整个数组一共有size个元素,最后一个元素的索引为size - 1。


这个循环从最后一个元素开始(data[size - 1]开始),将其前面,直到index位置的元素,都向后挪一个位置,腾出空间,给新加入的元素。这个过程,请再复习课程2-3小节,从4:38开始的动画演示:P')


在第一次调用,或者待添加元素放到整个数组末尾,即index == size的时候,这个循环是进不去的。可以想一下,此时循环开始的条件是i = size - 1,而循环进行的条件是 i >= index(此时为size),初始,i就小于index了,所以循环进不去。


这也非常好理解,当我们要把新元素添加到数组的最后一个位置时,是不需要挪动数组的任何一个元素,给新元素腾位置的,直接把新元素放到当前数组的末尾就好。即此时直接执行data[index] = e,此时的index = size。


加油!:)

1
4
Pro养成记
回复
liuyubobobo
谢谢,我可能忘了数组是按顺序排列的。祝您新年快乐
2019-02-05
共4条回复

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程