A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡帅冰 中级黑马   /  2013-3-19 16:35  /  2116 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 胡帅冰 于 2013-3-19 21:07 编辑

    数组在定义的时候是需要定义数组长度的,能不能在定义的时候动态的定义数组的长度?在以后使用的时候,增加数组的长度或者缩减数组的长度??

评分

参与人数 1技术分 +1 收起 理由
高境 + 1 赞一个!

查看全部评分

6 个回复

倒序浏览
这是不能的,数组一被定义,那么他在堆内存中就产生一个实体,这个数组的长度就是固定的。数组时存储同一类型元素的容器。等你学到集合,就会知道集合的长度是可以变化的,而且集合存储的是对象~~

评分

参与人数 1黑马币 +6 收起 理由
胡帅冰 + 6 谢谢。我知道了。

查看全部评分

回复 使用道具 举报
char [] c = new char;
你的意思是不是向上面那样,数组的长度i由方法传入或者其他,你可以在方法上指定数组长度然后传给上面的表达式 如下
  1.         public void testArray(int i)
  2.         {
  3.                 char[] c = new char[i];
  4.         }
复制代码
但是如果你说的是定义一个长度为a的数组,然后再下面的操作中有变成长度为b 那就不行了

评分

参与人数 1黑马币 +6 收起 理由
胡帅冰 + 6 谢谢……

查看全部评分

回复 使用道具 举报
这个是不行的,数组一旦被定义,或者说是被初始化,在长度在内存中就已经被固定了,而且只能存储一种类型的数据,如果添加数据太多,长度不够用,一般可以进行扩容,但是我说的扩容指的是把原来的数组中的数据拷贝到新的数组里面,原来的数组还在内存中的;新的数组长度要比原来的数组长度要大,然后增加新的数据,集合里面ArrayList底层用的是数组数据结构,如果长度不够用就重新创建个数组,长度比原来的大,把原来数组中的数据复制到新数组当中,并把新数组的引用赋给集合的引用变量。

评分

参与人数 2技术分 +1 黑马币 +10 收起 理由
胡帅冰 + 10 很给力! 谢谢,说的很详细。
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
         数组的长度是不能动态变化的,可以先定义集合,然后转换为数组。
Collection
变成数组(toArray()toArray(T[] a)
A.        为什么要将Collection集合变成数组呢?
为了限定对集合的操作,不需要对集合进行增删操作。
B.        指定类型的数组到底定义多长呢?
当指定类型的数组长度小于集合的size,那么该方法内部会重新创建一个数组,新创建的数组长度为集合的size。这样一来,原先传递进来的数组就无效,会浪费内存。
当指定类型的数组长度大于利集合的size,就不会重新创建数组,而是使用传递进来的数组。
综上两点,创建一个与集合的size一样长的数组最优。
import java.util.*;
public class Test {
    public static void main(String[] args) {
        Collection<String> collection = new ArrayList<String>();
        collection.add("aaa");
        collection.add("bbb");
        collection.add("ccc");
        /*
         * 传递进toArray方法的数组长度为1,小于Collection的size。
         * toArray方法内部重新创建了一个数组。
         */
        String[] arr1 = collection.toArray(new String[1]);
        System.out.println("arr1="+Arrays.asList(arr1));
        String[] arr2 = collection.toArray(new String[5]);
        System.out.println("arr2="+Arrays.asList(arr2));
        
    }
}
打印结果:
arr1=[aaa, bbb, ccc]
arr2=[aaa, bbb, ccc, null, null]

评分

参与人数 2技术分 +1 黑马币 +10 收起 理由
胡帅冰 + 10 赞一个! 谢谢……我试了你说的方法,很感.
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
楼主是想根据程序的需要创建一个最合适的数组,既能满足存储的需求,又能最优化性能吧?
其实ArrayList就是一个长度自动变化的数组~~楼主可以考虑使用这个替代数组

评分

参与人数 1黑马币 +6 收起 理由
胡帅冰 + 6

查看全部评分

回复 使用道具 举报
在定义的时候不能动态的定义数组长度,一旦定义了数组长度,就已经在分配了对应大小的内存区域,已经固定了,就没办法修改。

根据你的需求,你可以考虑这样处理:

int[] _array=null; 这里先定义。

然后通过:
int total=XXXX;  ---这里可以动态到数据库获取数值。
_array=new int[total];--- new一个内存空间!

评分

参与人数 1黑马币 +6 收起 理由
胡帅冰 + 6 谢谢……

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马