zoukankan      html  css  js  c++  java
  • 提高你的Java代码质量吧:如果有必要,使用变长数组吧

    一、分析 

    Java中的数组是定长的,一旦经过初始化声明就不可改变长度,这在实际使用中非常不方便 

    二、场景 

    比如要对班级学生的信息进行统计,因为我们不知道一个班级会有多少学生(随时都有可能会有学生入学、退学或转学),所以需要一个足够大的数组来容纳所有的学生 

    但是多大才算足够大呢?随着环境的变化,“足够大”也可能会编程“足够小”,然后就会超出数组的最大容量的情况,那该如何解决呢 

    事实上,可以通过对数组扩容“婉转”地解决问题,代码如下 

     

    public static <T> T[] expandCapacity(T[] datas,int newLen){ 
        //不能是负值 
        newLen = newLen < 0 ? 0 :newLen; 
        //生成一个新数组,并拷贝原地址 
        return Arrays.copyOf(datas,newLen); 
    } 

    上述代码中采用的是Arrays数组工具类的copyOf方法,产生了一个newLen长度的新数组,并把原来的值拷贝了进去,之后就可以对超长的元素进行赋值了。 

    使用方法如下: 

    public static void main(String[] args){ 
        //一个班最多有容量60个学生 
        Stu[] classes = new Stu[60]; 
        /*Classes初始化........*/ 
     
        //偶尔一个班级可以容纳80人,数组加长 
        classes = expandCapacity(classes,80); 
        /*重新初始化超过限额的20人*/ 
    } 

    通过这样的方式处理,曲折的解决了数组的变长问题 

    三、建议 

    在实际开发过程中,如果确实需要变长的数据集,数组也是在考虑范围之内的,不能因固定长度而将其否定之。其实,集合的长度维护功能的原理与此类似。

  • 相关阅读:
    Go实现线程池
    Go语言工程结构
    Go语言示例-函数返回多个值
    Go语言参数中的三个点是干什么的
    go语言示例-Timer计时器的用法
    Go语言的类型转化
    iOS 修改通讯录联系人地址(address)崩溃原因分析
    tableview小结-初学者的问题
    Objective-C总Runtime的那点事儿(一)消息机制
    论坛源码推荐(11.6):iPhone6/6 plus屏幕适配Demo,Java代码转Objective-C
  • 原文地址:https://www.cnblogs.com/pangblog/p/3249359.html
Copyright © 2011-2022 走看看