package cn.手工实现Arraylist;
/*
自定义实现ArrayList , 体会底层原理
实现泛形
*/
public class 实现增加 <E>{
private Object[] elementDate; //定义 私有的 elementDate 数组
private int size; //定义 私有的 Int 值 size
private static final int DEFALT_CAPACITY=10; //用 final 定义 私有的 常量
public 实现增加(){ //构造方法 实现最底层数组 长度为 DEFALT_CAPACITY
elementDate =new Object[DEFALT_CAPACITY];
}
public 实现增加(int capacit){ //构造方法 实现自己定义数组长度
if(capacit<0){
throw new RuntimeException("数组长度补能为负数");
}else if (capacit==0){
elementDate=new Object[DEFALT_CAPACITY];
}else {
elementDate =new Object[capacit];
}
}
public void add(E element){ //实现 增加元素的方法 没有范型的可以使用 Object obj
if(size==elementDate.length){
//扩容
Object[] newArray=new Object[elementDate.length+(elementDate.length>>1)]; //使用右移更加快速 10+10/2 注意运算符的优先级
System.arraycopy(elementDate,0,newArray,0,elementDate.length); //复制
elementDate=newArray;
}
elementDate[size++]=element;
}
//实现get方法
public E get(int v){
if(v<0){
throw new RuntimeException("索引值不能为负数"+v);
}else if (v>size){
throw new RuntimeException("索引超出范围"+v);
}
else {
return (E)elementDate[v];
}
}
//实现set方法
public void set(E a,int b){
if(b<0||b>size-1){
//不合法
throw new RuntimeException("索引不合法"+b);
}
elementDate[b]=a;
}
public void remove(E e){
for(int i=0;i<size;i++){
if(e.equals(get(i))){
remove(i);
}else {
throw new RuntimeException("没有该元素");
}
}
}
public void remove(int a){
int b=elementDate.length-a-1;
if(a>0){
System.arraycopy(elementDate,a+1,elementDate,a,b);}
else {
throw new RuntimeException("不能为负数");
}
}
//重写toString 方法
public String toString(){
StringBuilder sb = new StringBuilder();
//[a,b,c]
sb.append("[");
for (int i =0;i<size;i++){
sb.append(elementDate[i]+",");
}
sb.setCharAt(sb.length()-1,']');
return sb.toString();
}
public static void main(String[]args){
实现增加 a=new 实现增加();
for(int i=0;i<30;i++){
a.add(i);
}
a.remove(25);
a.remove("fafa");
System.out.println(a);
}
}
手工实现Arraylist
猜你喜欢
转载自blog.csdn.net/weixin_45736498/article/details/103720775
今日推荐
周排行