简单实现Arraylist和Linkedlist(一)

          大家都知道数组一旦创建好之后是无法改变长度的,但是在很多时候我们创建数组的时候并不知道数组所需的容量,在java中有两个类是可以不断地改变长度的,也就是我们接下来要讨论的这两个类。

        ArrayList是基于动态数组实现的一个类,Linkedlist是基于链表实现的一个类,这两个类都是可以不断地改变其长度的。但是这两个类也各有各的优缺点。

       由于ArrayList是基于动态数组实现的,所以其.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。

       由于Linkedlist基于链表实现的,所以对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。 但也不一定,因为对于add和remove操作的前提是要得到他的下标位置,所以还得用到get方法。所以这个时候就要看你需要在何处增删。

       本文首先谈谈ArrayList中的方法如何实现。下篇谈论Linkedlist中的方法的实现

      对于Arraylist的add方法。创建一个新数组长度为原来数组长度加一,然后将原数组的数据复制到新数组中,在将增加的信息放入新数组的末尾。再将原数组指向新数组即可。如图:

      对于Arraylist的插入操作,插入操作同样需要创建一个新数组长度为原来数组长度加一,然后得到插入的位置,将其插入位置之前的数据原封不动的复制到新数组中,插入之后的数据将原数组的数据通过下标加一放入新数组中,将插入的位置空出来,再将数据放入你所要插入的位置。如下图:

         对于ArrayList的删除操作,删除操作需要创建一个新数组长度为原来数组长度减一,然后得到所要删除的位置,将其删除位置之前的数据原封不动的复制到新数组中,删除之后的数据将原数组的数据通过下标减一放入新数组中。再将原数组指向新数组。如下图:

    其余方法比较简单,也就不一一解释了,下面附上代码供大家参考:

     import java.util.Arrays;

     public class MyArray {
           //初始化一个为0的数组
            private String[] src=new String[0];
           //往数组中增加数据
            public void add(String s){
            String[] src1=new String[src.length+1];//创建一新数组长度是原数组长度+1
            for(int i=0;i<src.length;i++){
            src1[i]=src[i]; //将原数组复制给新数组
             }
           src1[src1.length-1]=s; //将数据放入新数组尾部
            src=src1;//将原数组指向新数组
   }

   public int size(){
          return src.length;//返回数组的长度
    }

    public String get(int index){
      return src[index]; //获得数组的下标
    }

//往数组中指定位置插入数据
     public void insert(int index,String s){
                String src1[]=new String[src.length+1]; //新建一新数组长度是原数组长度-1
                for(int i=0;i<index;i++){
                src1[i]=src[i]; //将小于指定位置的数据,原数组复制给新数组。
                 }
                for(int i=src1.length-1;i>index;i--){
                src1[i]=src[i-1]; //将大于指定位置的数据,原数组复制给新数组的后一个
         }
                 src1[index]=s; //将数据放入新数组指定位置
                src=src1;//将原数组指向新数组
     }

            //修改指定下标的值
      public void modify(int index,String s){
                   src[index]=s;
   }

         //删除指定位置的数据
       public void delete(int index){
            String src1[]=new String[src.length-1]; //新建一新数组长度是原数组长度-1
            for(int i=0;i<index;i++){
            src1[i]=src[i];//将小于指定位置的数据,原数组复制给新数组。
              }
             for(int i=index+1;i<src.length;i++){
             src1[i-1]=src[i];//将大于指定位置的数据,原数组复制给新数组的前一个
             }
                   src=src1;
           }
   }

 下次博客更新Linkedlist中的方法的实现。有错误的话可以给我留言哦。

 

posted @ 2018-05-18 11:55  骑驴逛市场  阅读(270)  评论(0编辑  收藏  举报