黑马程序员技术交流社区

标题: 数组问题 [打印本页]

作者: 毛标    时间: 2012-10-25 12:40
标题: 数组问题
我们经常用数组,只是记住了用法,数组到底是什么,如果和基本数据类型一样那他怎么存元素的
它可以使用Object中的一些方法,那么它应该是一个类吧
那么应该可以在API中找到对应的类,翻了半天没找到。可能有点钻牛角尖了希望有人给解释下
作者: 程杰    时间: 2012-10-25 12:55
数组只是一个名称,在编译的时候,计算机会识别数组的[]标志,他会开辟一块连续存储内存地址的空间。所以所数组的长度是定了以后不能改变的。像集合Set,List这些底层也是用数组实现的,只不过他是在存储满一个数组后自动把这个数组长度扩大1.5还是1倍(具体的忘了。。)。
作者: kylin_huang    时间: 2012-10-25 13:01
数组就一容器,和集合差不多,是用来存放数据的,可以存放基本数据类型数据,
你说的类是Arrays类,就是一包装类,基本数据类型中都有自己对应的包装类,如int————integer,long——long。。。。
是类就直接或间接的继承object,可以使用object的方法,arrays类还有自己特有的方法,比如排序
不知道我讲明白了吗
作者: 毛标    时间: 2012-10-25 13:05
kylin_huang 发表于 2012-10-25 13:01
数组就一容器,和集合差不多,是用来存放数据的,可以存放基本数据类型数据,
你说的类是Arrays类,就是一 ...

其实我想知道数组的底层实现是什么样的~~比如arraylist就是一个具体类,有自己的方法什么的
那么作为数组既然继承了就应该有个可供查找的类存在,有文字叙述有方法体现等与其他类相似的表现形式
作者: 冯纪纲    时间: 2012-10-25 13:06
本帖最后由 冯纪纲 于 2012-10-25 13:07 编辑

数组是一组相关数据的集合,一个数组实际上就是一连串的变量。其实我感觉数组本身也是一种引用类型,再说了万物皆对象。
使用java中的数组,必须经过两个步骤,声明数组和分配内存给该数组,而 java中的数据类型分又为两大类,基本数据类型和引用类型
数组声明后实际上是在栈内存中保存了此数组的名称,结下了是要在堆内存中配置数组所需要的内存,然后告诉编译器,所声明的数组要存放多少个元素,而new 则是命令编译器根据括号里的长度。
下面是大致的内存分配 你瞅瞅



未命名1.jpg (750.05 KB, 下载次数: 20)

未命名1.jpg

未命名.jpg (785.99 KB, 下载次数: 15)

未命名.jpg

作者: 鲁中需    时间: 2012-10-25 13:27
java 提供了容纳对象(或者对象的句柄)的多种方式,其中内建的类型是数组,此外还有很重要的集合框架里的各种容器类。
数组和其他容器的区别有三个方面:效率、类型和保存基本类型的能力。
1.效率:
  数组是一种效率最高的存储和随机访问对象引用序列的方式。数组就是一个简单的线性序列,这是元素访问非常快。但为效率付出的代价就是数组对象的大小被固定,并且其生命周期中不可改变。
2.类型:
泛型之前,其他的容器在处理对象时,都将他们是为Object类。数组之所以优于泛型之前的容器,就是因为你可以创建一个数组去持有某种具体的类型,这意味这你可以通过编译器检查来防止插入错误的类型的抽取不当的类型。
3 保存基本类型的能力:
数组可以持有基本类型,但泛型之前的容器则不能。有了泛型之后,还有自动包装机制,容器看起来也能持有基本类型。

随着java对容器支持的增多,数组的优势减少,应优先使用容器而非数组。

(此为java编程思想数组那个章节中的主要思想与内容,希望能对你有所帮助。)
作者: up_    时间: 2012-10-25 13:28
class I{
     public static void main(String[] args){
           Person[] obj=new Person[3];
           obj[0]=new Person(12,"苍井空");
           obj[1]=new Person(12,"苍井优");
        }
}
class Person{
        int age;
        String name;
        Person(int age,String name){
                this.age=age;
                this.name=name;
        }
}
你可以看下以上例子,数组本身就是对象,你也可以按照集合的概念去理解数组,只是与集合不同的是,数组类型单一,长度固定。
除了字串符(String)数组外(放在方法区中的字符串常量池中),其他类型数组都是在堆内存中存储,按照角标位存储对象。




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