提高你的Java代码质量吧:如果有必要,使用变长数组吧
2013-08-09 09:00
357 查看
一、分析
Java中的数组是定长的,一旦经过初始化声明就不可改变长度,这在实际使用中非常不方便。
二、场景
比如要对班级学生的信息进行统计,因为我们不知道一个班级会有多少学生(随时都有可能会有学生入学、退学或转学),所以需要一个足够大的数组来容纳所有的学生。
但是多大才算足够大呢?随着环境的变化,“足够大”也可能会编程“足够小”,然后就会超出数组的最大容量的情况,那该如何解决呢?
事实上,可以通过对数组扩容“婉转”地解决问题,代码如下:
上述代码中采用的是Arrays数组工具类的copyOf方法,产生了一个newLen长度的新数组,并把原来的值拷贝了进去,之后就可以对超长的元素进行赋值了。
使用方法如下:
通过这样的方式处理,曲折的解决了数组的变长问题。
三、建议
在实际开发过程中,如果确实需要变长的数据集,数组也是在考虑范围之内的,不能因固定长度而将其否定之。其实,集合的长度维护功能的原理与此类似。
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人*/ }
通过这样的方式处理,曲折的解决了数组的变长问题。
三、建议
在实际开发过程中,如果确实需要变长的数据集,数组也是在考虑范围之内的,不能因固定长度而将其否定之。其实,集合的长度维护功能的原理与此类似。
相关文章推荐
- 提高你的Java代码质量吧:如果有必要,使用变长数组吧
- 提高你的Java代码质量吧:使用构造函数协助描述枚举项
- 提高你的Java代码质量吧:推荐使用枚举定义常量
- 提高你的Java代码质量吧:你能正确使用String、StringBuffer、StringBuilder吗
- 提高你的Java代码质量吧:使用valueof前必须进行校验
- 提高你的Java代码质量吧:推荐在复杂字符串操作中使用正则表达式 .
- 提高Java代码质量的Eclipse插件之Checkstyle的使用详解
- 【如何提高Java代码质量:频繁插入和删除时使用LinkedList 】
- 提高你的Java代码质量吧:多使用异常,把性能问题放一边
- 提高你的Java代码质量吧:使用valueof前必须进行校验
- 提高你的Java代码质量吧:推荐在复杂字符串操作中使用正则表达式
- 提高你的Java代码质量吧:使用构造函数协助描述枚举项
- 提高你的Java代码质量吧:正确使用String、StringBuffer、StringBuilder
- 提高Java代码质量:使用枚举定义常量(转)
- 提高你的Java代码质量吧:推荐使用String直接量赋值
- 提高Java代码质量的Eclipse插件之Checkstyle的使用具体解释
- 提高Java代码质量的Eclipse插件之Checkstyle的使用详解
- 提高你的Java代码质量吧:多使用异常,把性能问题放一边
- 提高Java代码质量的Eclipse插件之Checkstyle的使用详解