java如何手写动态数组?实例代码展示

BSO 2020-09-29 15:32:18 java常见问答 9101

自从21世纪以来。科学技术水平高速发展,这也促使了新兴技术的不断发展与壮大。越来越多的人开始投入到新技术的学习当中来。其中java的学习则是更多人的选择。今天就为大家介绍一下java如何手写动态数组,并用实际代码展示。一起来看看吧。

首先说一下注意事项。

1.在定义增量时,不要定义成一个固定的值,每次扩充一定比例。

2.比例不是越大越好,也要考虑到内存问题,所以取个合适的值就行。

3. 在Array中的src数组,可以定义成Object类型,那么便可使用全类型的数据,而不是某个固定下来的了。

4. 在删除和增加等方法中,不要使用临时数组来保存数据,那样会耗时耗内存。

5. 尽量不要在方法中出现重复的代码,例如add()和insert()方法中,都需要用到extend()方法中的代码,便可以提取出来封装为方法,易于修改和阅读。

实际代码展示如下:

package com.ct.array;
/** 
 * @author MoonMonster 
 * @version 创建时间:2020年9月21日 下午10:15:05 
 */
public class Array
{
    //数组中元素个数  
    private int count = 0;
    //初始容量大小  
    private int capcity = 16;
    //增量,每次增加的比例  
    private double increment = 1.2;
    //初始化数组  
    private Object[] src = new Object[capcity];
    public Array()
    {}
    //自定义原始数组大小  
    public Array(int capcity)
    {
        this.capcity = capcity;
    }
    // 增加  
    public void add(Object obj)
    {
        //判断是否越界,如是,则扩充数组  
        if (count >= src.length)
        {
            src = extend();
        }
        //将新增加的数据放在count处  
        src[count] = obj;
        count++;
    }
    // 对数组的扩充  
    private Object[] extend()
    {
        //扩充后的数组容量是旧的数组的increment倍  
        Object[] dest = new Object[(int)(src.length * increment)];
        for (int i = 0; i < src.length; i++)
        {
            dest[i] = src[i];
        }
        //返回扩充后的数组  
        return dest;
    }
    // 输出  
    public void print()
    {
        for (int i = 0; i < count; i++)
        {
            System.out.print(src[i] + " ");
        }
        System.out.println();
    }
    // 获得数组大小  
    public int size()
    {
        return count;
    }
    // 插入  
    public void insert(int index, Object obj)
    {
        if (count + 1 >= src.length)
        {
            src = extend();
        }
        //从最后一个元素开始,把前一个元素放到后一个位置来  
        for (int i = count; i > index; i--)
        {
            src[i] = src[i - 1];
        }
        //将要插入的元素放在index处  
        src[index] = obj;
        //在插入一个元素后,长度+1  
        count++;
    }
    //替换index处的数据  
    public void replace(int index, Object obj)
    {
        src[index] = obj;
    }
    //删除index处的数据元素  
    public void delete(int index)
    {
        for (int i = index; i < src.length - 1; i++)
        {
            src[i] = src[i + 1];
        }
        count--;
    }
    //返回index处的数据  
    public Object get(int index)
    {
        return src[index];
    }
}

测试类代码如下:

package com.ct.array;
/**  
 * @author MoonMonster 
 * @version 创建时间:2020年9月21日 下午10:20:50  
 */
public class Demo
{
    public static void main(String[] args)
    {
        Array arr = new Array();
        long t1 = System.currentTimeMillis();
        for (int i = 0; i < 10; i++)
        {
            arr.add(new Integer(i));
        }
        long t2 = System.currentTimeMillis();
        System.out.println("耗时: " + (t2 - t1));
        arr.insert(2, new Integer(123));
        //删除  
        arr.delete(0);
        //输出  
        arr.print();
        //数组长度  
        System.out.println("数组的长度为: " + arr.size());
    }
}

以上就是关于java如何手写动态数组并且通过实际的代码为大家展示。具体的操作还是需要大家自己去熟悉的。如果你对java知识感兴趣,想要了解更多java经典例子,敬请关注奇Q工具网。

推荐阅读:

java一维数组应用实例,Java求最大和最小值

java一维数组应用实例,Java统计商品信息

java一维数组应用实例,Java统计商品信息