任务描述
要求:
-
MyList接口包含六个方法:
void add(Object obj):往列表尾部添加对象
Object get(int index):从列表中获取索引为i的对象
void clear():清空所有的对象
boolean isEmpty():判断列表中是否有对象
int size():获取列表中对象的个数
int capacity():所分配的空间大小
-
MyObjectArray类实现MyList接口,内部以数组的方式实现,要求:
构造函数MyObjectArray(int incSize):参数incSize为数组初始化大小和空间的增量。若用户调用incSize非法,则设为默认值5。
当调用add()方法往试图往MyObjectArray中增加对象时,如果内部数组已满,则增加数组大小,增量为incSize。
调用clear()方法可以清空所有通过add()方法加入的对象。
调用get(int index)方法时,如果传入的参数非法,则返回null对象,否则返回对应的对象。
-
MyDoubleArray类也实现ReList接口,内部依旧通过数组实现,要求:
构造函数MyDoubleArray(int initSize):参数initSize表示数组的初始化大小。若用户调用initSize非法,则设为默认值10。
当调用add()方法往MyDoubleArray列表里面增加对象时,如果其内部数组已满,则将数组的长度变为当前长度的2倍。
其他方法和MyObjectArray一致
####提示: 增加数组长度的方法:使用java.util.Arrays.copyOf()方法,用法请查阅Java API文档。
代码:
MyList.java
package step1;
// ****fly****
public interface MyList {
public void add(Object obj);
public Object get(int index);
public void clear();
public boolean isEmpty();
public int size();
public int capacity();
}
MyObjectArray.java
package step1;
// ****fly****
import java.util.Arrays;
public class MyObjectArray implements MyList {
private Object[] Array=null;
private int cindex=0;
private int incSize;//数组长度增量
public MyObjectArray() {
//构造函数
}
public MyObjectArray(int incSize) {
if(incSize<0) {
this.incSize=5;
}else {
this.incSize=incSize;
}
this.Array=new Object[this.incSize];
}
@Override
public void add(Object obj) {
// TODO Auto-generated method stub
if(cindex==Array.length) {//数组最后一位元素下标等于数组长度,说明数组已满,否则直接将其赋值为obj
Array=Arrays.copyOf(Array,Array.length+incSize);
}Array[cindex]=obj;
cindex++;
}
@Override
public Object get(int index) {
// TODO Auto-generated method stub
Object obj=null;
if(index>0 && index<cindex) {
obj=Array[index];
}
return obj;
}
@Override
public boolean isEmpty() {
// TODO Auto-generated method stub
boolean flag=false;
if(Array[0]==null) {
flag=true;
}
return flag;
}
@Override
public int size() {
// TODO Auto-generated method stub
return cindex;
}
@Override
public int capacity() {
// TODO Auto-generated method stub
return this.Array.length;
}
@Override
public void clear() {
// TODO Auto-generated method stub
this.Array=new Object[5];
this.cindex=0;
}
}
MyDoubleArray.java
package step1;
// ****fly****
import java.util.Arrays;
public class MyDoubleArray implements MyList{
private Object[] Array=null;
private int initSize;
private int cindex=0;
public MyDoubleArray(){
//构造函数
}
public MyDoubleArray(int initSize) {
if(initSize<0) {
this.initSize=10;
}else {
this.initSize=initSize;
}this.Array=new Object[this.initSize];
}
@Override
public void add(Object obj) {
// TODO Auto-generated method stub
if(cindex==Array.length) {
Array=Arrays.copyOf(Array, Array.length+Array.length);
}Array[cindex]=obj;
cindex++;
}
@Override
public Object get(int index) {
// TODO Auto-generated method stub
if(index>0 && index<cindex) {
return Array[index];
}else {
return null;
}
}
@Override
public void clear() {
// TODO Auto-generated method stub
this.Array=new Object[10];
this.cindex=0;
}
@Override
public boolean isEmpty() {
// TODO Auto-generated method stub
boolean flag=false;
if(Array[0]==null) {
flag=true;
}
return flag;
}
@Override
public int size() {
// TODO Auto-generated method stub
return cindex;
}
@Override
public int capacity() {
// TODO Auto-generated method stub
return this.Array.length;
}
}
//参考一位大佬代码做的这题。MyDoubleArray类也实现ReList接口类似于MyObjectArray类实现MyList接口,只需对相关方法进行修改即可。
相关知识点记录:
1.Arrays的copyOf()方法传回的数组是新的数组对象,改变传回数组中的元素值,不会影响原来的数组。copyOf的第二个自变量指定要建立的新数组长度,如果新数组的长度超过原来数组的长度,则保留数组默认值。