老师,我自己定义了一个ArrayList类,但是输出的时候集合中没有元素对象的都索引位置上都会显示为空,能解释一下这是怎么回事吗
package cn.zl.practice;
import java.util.Arrays;
public class MyArrayList<E> {
private int size = 0;//元素个数
private final Object[] DEFAULT_INITIAL_EMPTY_CAPACITY ={};//默认空数组
private final static int INITIAL_CAPACITY = 10;//初始容量
private Object[] elementDate;//底层数组
//无参构造方法
public MyArrayList(){
this.elementDate = DEFAULT_INITIAL_EMPTY_CAPACITY;
}
//有参构造方法
public MyArrayList(int initial){
if(initial > 0){
this.elementDate = new Object[initial];
}else if(initial == 0){
this.elementDate = DEFAULT_INITIAL_EMPTY_CAPACITY;
}else{
System.out.println("请输入正确的容量!!!");
}
}
//添加方法
public boolean add(E e){
Object[] nelementDate = elementDate;
add(e,nelementDate,size);
return true;
}
//通过数组与数组长度添加元素对象
public void add(E e,Object[] obj,int s){
if(s == size){
obj = grow(size + 1);
}
obj[s] = e;
size = s + 1 ;
}
//通过最小容量扩充数组容量
public Object[] grow(int miniCapacity){
return elementDate = Arrays.copyOf(elementDate,newCapacity(miniCapacity));
}
//计算扩充的容量
private int newCapacity(int miniCapacity) {
int oldCapacity = size;//elementDate.length就会有更多的null
int newCapacity = oldCapacity + (oldCapacity >> 1);
if (newCapacity <= miniCapacity) {
if (elementDate == DEFAULT_INITIAL_EMPTY_CAPACITY) {
return Math.max(INITIAL_CAPACITY, miniCapacity);
}
if(miniCapacity < 0){
System.out.println("请输入正确的容量!!!");
}
return miniCapacity;
}
return newCapacity;
}
//将元素添加到指定位置
private void add(E e,int index){
checkIndex(index,size);
Object[] element = elementDate;
int length;
if((length = size) == (element = this.elementDate).length){
element = grow(size + 1);
}
System.arraycopy(element,index,element,index+1,length-index);
element[index] = e;
size = length + 1;
}
//检查索引
private void checkIndex(int index,int size){
if(index < 0 || index >= size)
throw new IndexOutOfBoundsException();
}
//删除指定索引的元素
private Object remove (int index){
checkIndex(index,size);
Object[] e = elementDate;
Object oldelement = e[index];
cremove(e,index);
return oldelement;
}
//删除元素方法的内部方法
private void cremove( Object[] es,int dex){
final int s ;
if((s = size - 1) > dex){
System.arraycopy(es,dex + 1,es,dex,s-dex);
}
es[size = s] = null;
}
//删除指定的元素对象
private Object remove(Object o){
Object obj = o;
for (int i = 0; i < elementDate.length ; i++) {
if(obj.equals(elementDate[i])){
remove(i);
}
}
return obj;
}
//根据索引获得对象
private Object get(int index){
checkIndex(index,size);
return elementDate[index];
}
//重写toString方法
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("{");
for (int i = 0; i < elementDate.length; i++) {
sb.append(elementDate[i] + ",");
}
if(size > 0)
sb.setCharAt(sb.length() - 1,'}');
else
System.out.println("}");
return sb.toString();
}
//获得数组元素的个数
private int size(){
return elementDate.length;
}
public static void main(String[] args) {
//创建集合对象
MyArrayList<String> array = new MyArrayList<>();
//添加元素
array.add("关羽");
System.out.println(array);
array.add("吕布");
array.add("王者荣耀");
//添加元素到指定位置
array.add("貂蝉",2);
System.out.println(array);
//删除指定位置的元素
System.out.println(array.remove(1));
//删除指定的元素对象
array.remove("貂蝉");
System.out.println(array);
//获得指定索引的元素
System.out.println(array.get(0));
//获得集合的元素个数
System.out.println(array.size());
}
}
运行结果是这样的:
