动力节点首页 全国咨询热线:400-8080-105

绑定手机号,登录
手机号

验证码

微信登录
手机号登录
手机号

验证码

微信登录与注册
微信扫码登录与注册

扫码关注微信公众号完成登录与注册
手机号登录
首页 > 文章

实例解析Java数组扩容

05-19 16:10 988浏览
举报 T字号
  • 大字
  • 中字
  • 小字

我们先来搞清楚Java数组扩容的原理:

1)Java数组对象的大小是固定不变的,数组对象是不可扩容的。

2)利用数组复制方法可以变通的实现数组扩容。

3)System.arraycopy()可以复制数组。

4)Arrays.copyOf()可以简便的创建数组副本。

5)创建数组副本的同时将数组长度增加就变通的实现了数组的扩容。

源码展示:

public class Arrays {
    /**
     * @param original: the array to be copied
     * @param newLength: the length of the copy to be returned
     * @return a copy of the original array, truncated or padded with zeros
     *     to obtain the specified length
     */
    public static int[] copyOf(int[] original, int newLength) {
        int[] copy = new int[newLength];
        System.arraycopy(original, 0, copy, 0,
                         Math.min(original.length, newLength));
        return copy;
    }
    /**
     * @param original the array from which a range is to be copied
     * @param from the initial index of the range to be copied, inclusive
     * @param to the final index of the range to be copied, exclusive.
     *     (This index may lie outside the array.)
     * @return a new array containing the specified range from the original array,
     *     truncated or padded with zeros to obtain the required length
     */
    public static int[] copyOfRange(int[] original, int from, int to) {
        int newLength = to - from;
        if (newLength < 0)
            throw new IllegalArgumentException(from + " > " + to);
        int[] copy = new int[newLength];
        System.arraycopy(original, from, copy, 0,
                         Math.min(original.length - from, newLength));
        return copy;
    }
}

示例说明:

import java.util.Arrays;

/** 数组变长算法!
 * 数组对象长度不可改变
 * 但是很多实际应用需要长度可变的数组
 * 可以采用复制为容量更大的新数组, 替换原数组, 实现变长操作
 * */
public class ArrayExpand {
    public static void main(String[] args) {
        //数组变长(扩容)算法!
        int[] ary={1,2,3};
        ary=Arrays.copyOf(ary, ary.length+1);
        ary[ary.length-1]=4;
        System.out.println(Arrays.toString(ary));//[1, 2, 3, 4]
        //字符串连接原理
        char[] chs = { '中', '国' };
        chs = Arrays.copyOf(chs, chs.length + 1);
        chs[chs.length - 1] = '北';
        chs = Arrays.copyOf(chs, chs.length + 1);
        chs[chs.length - 1] = '京';
        //字符数组按照字符串打印
        System.out.println(chs);//中国北京
        //其他数组按照对象打印
        System.out.println(ary);//[I@4f1d0d
    }
}

实现案例:

案例1 : 统计一个字符在字符串中的所有位置.

字符串: 统计一个字符在字符串中的所有位置

字符: '字'

返回: {4,7}

public class CountCharDemo {
    public static void main(String[] args) {
        char key = '字';
        String str = "统计一个字符在字符串中的所有位置";
        int[] count=count(str,key);
        System.out.println(Arrays.toString(count));//[4, 7]
    }
    public static int[] count(String str,char key){
        int[] count={};
        for(int i=0;i<str.length();i++){
            char c=str.charAt(i);
            if(c==key){
                //扩展数组
                count=Arrays.copyOf(count, count.length+1);
                //添加序号i
                count[count.length-1]=i;
            }
        }
        return count;
    }
}

通过上面的代码,再结合文章开头的Java数组扩容的原理,相信基本上大家已经掌握了Java数组扩容的简单实现,当然,冰冻三尺,非一日之寒,我们还需要在动力节点在线上观看更多的Java数组扩容的实例代码,才能举一反三,大量的练习才能让我们熟练掌握Java数组扩容的技巧。

0人推荐
共同学习,写下你的评论
0条评论
代码小兵652
程序员代码小兵652

113篇文章贡献392215字

相关课程 更多>

作者相关文章更多>

推荐相关文章更多>

Java面试题及答案整理

提枪策马乘胜追击04-21 20:01

Spring常见面试题

代码小兵92504-17 16:07

Java零基础实战项目——五子棋

代码小兵98804-25 13:57

Java string类详解

杨晶珍05-11 14:54

6道经典算法面试题

杨晶珍05-12 16:39

发评论

举报

0/150

取消