刚入门java,把自己之前考试的一个问题分享出来,一来增加自己的记忆力,也希望能帮助刚开始学习的你
如题:定义一个Object类型的数组,初始容量为10,当添加到第十个元素的时候,数组的长度扩展为原来的两倍
思路:
1.定义一个容量为10的Object类型的数组:Object [ ] obj = new Object[10];
2.增加元素,并且判断当增加到10个元素的时候,扩展数组容量(我的思路是用System.arraycopy(),借助一个中间数组temp,将原数组copy进去temp然后再赋值给obj)
即:
①Object [ ] temp = new Object [obj.length*2] ;//这个中间数组容量是原数组的两倍
②System.arraycopy(obj,0,temp,0,obj.length);// 将原数组copy进去temp
③obj = temp;//将temp赋值给原数组obj
可参考我实现的方式:
/*
* 定义一个Object类型的数组,初始容量为10,
* 当添加到第十个元素的时候,数组的长度扩展为原来的两倍
* @author qyj11day
*
*/
public class AddLength {
private Object[] obj;// object数组
private int index;// 数组下标
public Object[] getObj() {
return obj;
}
public void setObj(Object[] obj) {
this.obj = obj;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
public AddLength() {// 默认构造函数
init();
}
private void init() {// 数组的初始化
this.index = 0;
this.obj = new Object[10];
}
public void addLength(Object ele) {// 添加元素
obj[index] = ele;
index++;
// 如果数组下标达到数组长度就开始扩容
if (index == obj.length) {
Object[] temp = new Object[obj.length * 2];
System.arraycopy(obj, 0, temp, 0, obj.length);
obj = temp;
}
}
// 通过下标获取数组里的元素
public Object getEle(int index) {
return obj[index];
}
public static void main(String[] args) {
AddLength a = new AddLength();
int sum = 0;
for (int i = 0; i < 20; i++) {
a.addLength(i);
}
//下面做一个简单验证
for (int i = 0; i < a.getIndex(); i++) {
sum += (int) a.getEle(i);
}
System.out.println(a.getIndex()); // 20
System.out.println(sum); // 190
}
}