java-自定义模拟ArrayList
学习java 模拟一下ArrayList的实现
package MyCollection;/*
* @Auther: zpf
* @Date: 2019/7/12
* @Description: MyCollection
* @version:1.0
*/
import java.lang.reflect.Array;
import java.util.Arrays;
public class MyArrayList {
//MyArrayList底层也是一个Object类型的数组:
Object[] value;
//数组中被使用的数量
int count;
//空构造器
public MyArrayList(){
// value = new Object[10];
this(10);
}
//有参构造器
public MyArrayList(int length){
value = new Object[length];
}
//添加add方法:
public void add(Object o){
value[count]=o;
count++;
//长度不够 进行扩容:
if(count>=value.length){
Object[] newObj=new Object[value.length*2+1];
//老数组中的值复制到新数组中:
//扩容方式一:
//Object[] newObj= Arrays.copyOf(value,20);
//扩容方式二:
for (int i = 0; i <count ; i++) {
newObj[i]=value[i];
}
//value的指向:改成新数组:
value=newObj;
}
}
//重写toString
@Override
public String toString() {
StringBuilder sb =new StringBuilder();
sb.append("[");
if(count!=0){
for (int i = 0; i < count ; i++) {
sb.append(value[i]+",");
}
sb.setCharAt(sb.length()-1,']');
}else{
sb.append("]");
}
return sb.toString();
}
//计算数组中元素方法:
public int length(){
return count;
}
//判断是否为空
public boolean isEmpty(){
return count==0;
}
// 删除remove方法:
public void remove(Object o){
int del=count+1;
for (int i = 0; i < count ; i++) {
if(value[i].equals(o)){
del=i;
break;
}
}
for (int i = del; i < count-1; i++) {
value[i]=value[i+1];
}
if (del==count+1)
return;
else
count--;
}
public static void main(String[] args) {
//创建一个我自定义数组的对象
MyArrayList list=new MyArrayList();//底层数组长度为10
list.add("123");
list.add("1");
list.add("2");
list.add("3");
System.out.println(list);
System.out.println(list.length());
System.out.println(list.isEmpty());
list.remove("2");
System.out.println(list);
System.out.println(list.length());
System.out.println(list.isEmpty());
}
}