如何自定义一个长度可变数组

摘要:本文主要写了如何自定义一个长度可变数组 

数组是在程序设计中,为了处理方便,把具有相同类型的若干元素按无序的形式组织起来的一种形式 

在定义之初,数组的长度就被定义

新建数组有很多方式 下面两个都可以 但一般书写习惯会选择第一种 

1 String[] array = new String[5]; //新建一个长度为5的字符串数组
1 String array[] = new String[5];  // 新建一个长度为5的字符串数组

由于数组的长度一旦初始化就无法改变,所以我们需要另辟思路

假如我有一个只能装5个鸡蛋的篮子 

现在我想多放入一个鸡蛋 但篮子放不下 怎么办!!

用传说中的四步法就可以解决这个问题啦

 1.找一个能放下6个鸡蛋的容器!

 2.将五个鸡蛋放入后来的容器!

 3.将拿来的第六个鸡蛋也放入容器!

 4.将之前的“篮子”标签撕下,贴在新容器上!

此时,我就有了一个能装6只鸡蛋的篮子!是不是很简单呢 

数组也是这样的 

将篮子看做为一个长度为5的数组 其元素有 1 ,2 ,3 ,4 ,5

此时有一个元素 6 需要加入 

则先新建一个长度为6的数组

然后将原来数组中的元素依次放入新建的数组 

然后将元素 6 也放入其中 

然后将原来的篮子标签撕下 给新的数组 

将原数组的地址指向新数组 

想必看到这里 ,思路应该没有问题了

代码实现如下:

 1 public class MyArray {
 2     //定义一个初始长度为0的数组,用来缓存数据
 3     private String[] src = new String[0];
 4     /**
 5      * 保存数据的方法
 6      * @param s 要保存的元素
 7      */
 8     public void add(String s) {
 9         //定义一个新数组,长度是原数组的长度+1
10         String[] dest = new String[src.length+1];
11         //将新元素放入最后一位
12         dest[src.length]=s;
13         //将原先的数据对应下标放入新数组
14             for(int i = 0 ;i<src.length;i++) {
15                 dest[i]=src[i];
16                 
17             }
18             //将原数组指向新数组
19             src=dest;
20     }
21     /**
22      * 根据下标提取元素的方法
23      * @param Index    要提取元素的下标
24      * @return    返回所提取的元素
25      */
26     public String get(int index) {
27         //返回对应下标的元素
28         return src[index];
29     }
30     
31     /**
32      * 获得元素可变数组中元素的个数[长度]
33      * @return    返回元素的个数
34      */
35     public int size() {
36         //返回数组的长度
37         return src.length;
38     }
39     /**
40      * 将新元素插入到指定位置
41      * @param s    要插入的新元素
42      * @param index    要插入的位置
43      */
44     public void insert(String s,int index) {
45         //创建一个新的数组,其长度为原数组长度加1
46         String[] dest = new String[src.length+1];
47         //将指定的元素放入指定的位置
48         dest[index]=s;
49         //在指定下标之前的元素对应下标放入新数组
50         for(int i=0;i<index;i++) {
51             dest[i]=src[i];    
52         }
53         //在指定下标之后的元素对应其下标加1放入新数组
54         for(int i=index+1;i<src.length+1;i++) {
55             dest[i]=src[i-1];
56         }
57         src=dest;
58     }
59     /**
60      * 删除指定未知的元素
61      * @param index 要删除的元素的下标
62      */
63     
64     public void delete(int index) {
65         //创建一个新的数组,其长度为原数组长度减1
66         String[] dest = new String[src.length-1];
67         //指定下标之前的原数组元素对应其下标位置放入新数组
68         for(int i=0;i<index;i++) {
69             dest[i]=src[i];
70         }
71         //指定下标之后的原数组元素对应其下标位置-1放入新数组
72         for(int i=index+1;i<src.length;i++) {
73             dest[i-1]=src[i];
74         }
75         src=dest;
76     }
77     
78     /**
79      *  将指定位置的元素与指定元素替换
80      * @param index 指定位置的下标
81      * @param s    要替换的元素
82      * @return    返回替换后的
83      */
84     
85     public String replace (int index,String s) {
86         return src[index]=s;
87     }    
88 }

感谢阅读

原文地址:https://www.cnblogs.com/hy610581/p/9053778.html