标签:指定位置 move port 初始 str [] 数组实现 insert 就是
大家都知道数组一旦创建好之后是无法改变长度的,但是在很多时候我们创建数组的时候并不知道数组所需的容量,在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中的方法的实现。有错误的话可以给我留言哦。
标签:指定位置 move port 初始 str [] 数组实现 insert 就是
原文地址:https://www.cnblogs.com/hzlsss/p/9055547.html