
题目:自义一个类MyArrayList,实现ArrayList类中的add,remove,set,get,size,clear方法相同的功能
题目:自义一个类MyArrayList,实现java.util.ArrayList类中的add,remove,set,get,size,clear方法相同的功能,并写出测...
题目:自义一个类MyArrayList,实现java.util.ArrayList类中的add,remove,set,get,size,clear方法相同的功能,并写出测试MyArrayList类中所有方法的代码。
注意:是用自己的写的方法来实现上面的功能,不是在方法当中再调用它原本的方法。谢谢。 展开
注意:是用自己的写的方法来实现上面的功能,不是在方法当中再调用它原本的方法。谢谢。 展开
2个回答
展开全部
import java.util.Arrays;
public class MyArrayList {
private Object[] datas;// 存放数据
private int size;// 存放大小
public MyArrayList() {
this.size = 0;
datas = new Object[10];
}
public boolean add(Object obj) {
ensureCapacity(size + 1);
datas[size++] = obj;
return true;
}
public Object remove(int index){
RangeCheck(index);
Object oldValue = datas[index];
int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(datas, index+1, datas, index,
numMoved);
datas[--size] = null;
return oldValue;
}
public Object set(int index,Object obj){
RangeCheck(index);
Object oldValue = datas[index];
datas[index] = obj;
return oldValue;
}
public Object get(int index){
RangeCheck(index);
return datas[index];
}
public int size() {
return size;
}
public void clear(){
for (int i = 0; i < datas.length; i++) {
datas[i] = null;
}
size = 0;
}
public void ensureCapacity(int minCapacity) {
int oldCapacity = datas.length;
if (minCapacity > oldCapacity) {
int newCapacity = (oldCapacity * 3) / 2 + 1;
if (newCapacity < minCapacity)
newCapacity = minCapacity;
datas = Arrays.copyOf(datas, newCapacity);
}
}
private void RangeCheck(int index) {
if (index >= size)
throw new IndexOutOfBoundsException(
"Index: "+index+", Size: "+size);
}
}
public class TestMyArrayList {
public static void main(String[] args) {
MyArrayList list = new MyArrayList();
list.add("test1");
list.add("test2");
list.add("test3");
list.add("test4");
System.out.println("size:"+list.size());
for (int i = 0; i < list.size(); i++) {
System.out.println(i+":"+list.get(i));
}
Object oldValue = list.set(2, "test5");
System.out.println("oldValue:"+oldValue);
System.out.println("newValue:"+list.get(2));
list.remove(3);
System.out.println("size:"+list.size());
for (int i = 0; i < list.size(); i++) {
System.out.println(i+":"+list.get(i));
}
list.clear();
System.out.println("size:"+list.size());
}
}
更多追问追答
追问
请问这个代码是和它的源代码是一样的吧?我就是有点不太懂它那ensureCapacity方法和RangeCheck方法的,请问你能注释一下吗?谢谢
追答
这个我也看着源代码写的。ensureCapacity主要是在Add的时候去判断对象数组的长度,如果已经满了就要扩容的嘛,RangeCheck主要是在按index添加,更新删除的时候,判断index是否越界,如果index>=size,这个时候对象数组中的第index根本不存在的嘛。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询