数组添加元素这里不太懂
来源: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回答
-
整个数组一共有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。
加油!:)
142019-02-05
相似问题