为什么不用数组表示一切?

为什么不用数组表示一切?
    仅使用数组似乎就可以完成所有工作,为什么不用它们来进行所有的数据存储呢?我们已经见
到了许多关于数组的缺点。在一个无序数组中可以很快进行插入(o(1)时间),但是查找却要花费较慢的o(N)时间。在一个有序数组中可以查找得很快,用o(logN)的时间,但插入却花费了o(N)时间。对于这两种数组而言,由于平均半数的数据项为了填补“空洞”必须移动,所以删除操作平均需要o(N)时间。
    如果有一种数据结构进行任何如插入、删除和查找的操作都很快(理想的o(1)或是o(logN)时
间)那就好了。以后可以见到我们离这种理想是多么近,但是这是以程序的复杂度做为代价的。
    数组的另一个问题便是它们被new创建后,大小尺寸就被固定住了。但通常在开始设计程序时
并不知道会有多少数据项将被放入数组中,所以需要猜它的大小。如果猜的数过大,会使数组中
的某些单元永远不会被填充而浪费空间。如果猜得过小,会发生数组的溢出,最好的情况下会向程
序的用户发出警告消息,最坏的情况则会导致程序崩溃, 有些更加灵活的数据结构可以随插入数据项而扩展大小。链表就足这样的结构。
    Java命有一个被称作vector的类使用起来很像数组,但是它可以扩展。这些附加的功能是以
效率作为代价的。有人可能想尝试创建自己的向量(vector)类。当类用户使用类中的内部数组将要溢出时.插入算法创建一个大—点的数组,把旧数组中的内容复制到新数组,然后再插入新数据项,整个过程对于类用户来说是不可见的。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值