黑马程序员技术交流社区

标题: JAVA数组的疑惑 [打印本页]

作者: yan5108652    时间: 2013-5-2 04:25
标题: JAVA数组的疑惑
本帖最后由 yan5108652 于 2013-5-5 14:30 编辑

java基本数据类型的数组,比如int[4]=5,这个5是确实的可以被删除的,但是由于
数组本身的机制不允许其内部存在‘洞’,以避免增加无谓的算法负荷,所以
每删除一项的时候都会将该数据之后的数据往前调一个位置,保证该数组不存在‘洞’
所以这样理解 java数组里的项可以真正被删除以形成'洞',但是由于没有意义,
所以普遍就认为java数组不可被删除,只是覆盖原来的数据,就比如int[x+1]=int[x];

这种理解对不?
作者: 江南雨    时间: 2013-5-2 07:41
你这样理解很对!!
作者: 花开花落总相似    时间: 2013-5-2 07:46
     java 数组被定义完之后是不可以更改数组的长度的,想要改变数组的长度 可以通过System中的arraycopy来实现也就是说 只能将一个数组重新copy到另一个数组中去,新建一个符合要求的数组。  不过貌似有一种可以递增的 好像是StringBuffer的内容 具体我也没有记清楚,追加东西的 你可以去查查API。 呵呵
作者: pthuakai    时间: 2013-5-2 08:13
学数据结构的时候,严蔚敏的书,凡是遇到这种数组的增删改查,都是以增删点为基点,后面的往前或者往后移动,就是你说的覆盖问题。倒是没听说洞的问题
作者: 高正新    时间: 2013-5-2 10:16
没看明白什么意思。
作者: 刘胜寒    时间: 2013-5-2 10:34
没看明白...
作者: 黄玉昆    时间: 2013-5-3 22:36
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
作者: 杨兴庭    时间: 2013-5-5 10:32
数组是以顺序结构的形式保存在堆内存中的,数组首元素地址就是该数组的地址,数组的下标就是指针,打印的时候,指针变量指向对应的指针,打印出该元素,而数组就可以理解成很多同类盒子(变量)顺序连接组成的大盒子,大盒子内装了小盒子,小盒子内装数据,所以我认为在删除数组元素的时候删除的是盒子内的数据,盒子并没有被删除,装数据的容器还在,举个例子:如楼主所说int[4]=5,   这个5可以删除,但是数组中4这个地址装数据的盒子并没有被删除, 在删除数组元素时并没有改变定义数组在内存中的状态。因为数组是顺序存储的,就像学生站路队一样,,中间忽然少了个人,后面的人立马跟上补上走掉那个人的位置,(楼主所说的覆盖),这样原定长度的数组最后元素的地址就会造成空缺,系统默认空字符补上(\0).   下面是我画的数组的存储形式图(个人理解仅供参考,呵呵)

数组.png (11.51 KB, 下载次数: 0)

数组.png

数组2.png (12.5 KB, 下载次数: 0)

数组2.png





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2