ArrayList详解(1)

     通常 程序运行总是根据运行时才知道的条件创建新对象,不到运行时,不会知道所需要对象的数量,甚至不知道确切的类型,为解决这个普遍的编程问题,需要能够在任意的时刻和任意的位置穿件任意数量的对象,所以不能根据依靠创建命名的引用来持有每一个对象,MyObject object ;

因为你不知道实际上会需要多少个这样的引用,

大多数的语言都会提供某种方法来解决这个问题,Java有多种方式保存对象(准确来说应该是对象的引用),例如前面学习的数组,他是语言内置的类型,Java 类库还提供了一套相当完整的容器类(也称为集合类)来保存与操控对象。

数组与其他的种类的容器之间的区别有三个方面:效率,类型和保存基本类型的能力,在Java中,数组是一种效率最高的存储和随机访问对象序列的方式,数组就是一个简单的线性序列,这使得元素的访问非常的快,但是也损失了一些其他的特征,当创建了一个数组对象(将数组本身看作对象对待),数组的大小就固定了,并且这个数组的生命周期也是不可改变的,通常是创建一个特定大小的数组,在空间不足的时候在创建一个新的数组,然后再把原来旧的数组的的引用复制移动到新的数组中,然而这种弹性的带来的开销是的ArrayList的效率远远低于数组。

在C++中,容器类vector的却知道自己保存的对象是何类型,不过Java的数组比较,它还有一个缺点,C++的vector的操作符不作边界检查,所以可能会越界操作,而在Java中只要使用的是容器类,都将会做边界的检查,如果越界将会得到一个RuntimeException异常。

其他的容器类List,Map,Set 通用的容器类,他们不以具体的类型来处理对象,换句话说他们将所有的对象都是按照Object类型处理,即Java类中所有类的基类,从某个角度上来说,这种方式很好:你只需构建一个容器类,任意的Java对象都可以放入其中,除开基本可以放入容器类作为使用Java基本包装起类的常量,当你创建一个数组的时候,它只能保存特定的类型(数组可以保存基本的数据类型,而容器类却不能),这意味着会在编译时做类型检查,以防将错误的类型插入数组,或取出数据时弄错类型,当然,无论在编译时还是运行时,Java都会阻止你向对象发送不恰当的消息,所以并不是说哪种方法更不安全,只是如果编译时就能够指出错误,那么程序可以运行得更快。

考虑到效率与类型的检查,应该尽可能的使用数组,然而如果要解决一些一般化的问题,数组就可以受到更多的限制,

无论使用的是哪种类型的数组,数组标识符其实只是一个引用,只想在堆中创建的一个真实对象,这个(数组)对象用以保存指向其他对象的引用,可以作为数组,初始化隐式的创建此对象,或者用new 来表达显示的创建。只读成员length是数组对象的一部分(事实上这是唯一的一个可以访问的字段或者方法)表示此数组可以存储多少个元素

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值