zoukankan      html  css  js  c++  java
  • 简单实现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中的方法的实现。有错误的话可以给我留言哦。

  • 相关阅读:
    [Objective-C语言教程]决策结构(10)
    [Objective-C语言教程]循环语句(9)
    [Objective-C语言教程]关系运算符(8)
    [Objective-C语言教程]常量(7)
    [Objective-C语言教程]变量(6)
    [Objective-C语言教程]数据类型(5)
    转 Apache Ant 实现自动化部署
    转 智能化运维最佳实践-自动化
    ANT 操控 ORACLE数据库实践
    转: Ant 脚本的结构化设计
  • 原文地址:https://www.cnblogs.com/hzlsss/p/9055547.html
Copyright © 2011-2022 走看看