永发信息网

请问数组和List有什么区别呢

答案:2  悬赏:20  手机版
解决时间 2021-01-25 09:21
请问数组和List有什么区别呢
最佳答案
arrayList 是一个队列,内存大小不固定,可以采用add的方法往队列后添加数据。

数组是一个固定内存大小的队列,不能扩充。
全部回答
array和list都属于顺序表。 array是一段连续的存储结构 int[] i=new int[3] i其实记录的是数组的首地址,而i[1]其实相当于在i的地址的基础上加上1个整数的地址偏移,然后再取这块地址中的值。 list则是不连续的存储结构,list的每个节点都有着一个next属性,这个属性则记录着他的下一个节点的地址。 也就是说当我们想找第100个节点的时候,他还是需要从第一个节点,然后做99次next操作,才能找到list[99]节点。 在查找一个元素时时分别生成以下il码 array:   il_0020:  ldloc.0   il_0021:  ldc.i4.3   il_0022:  ldelem.i4   il_0023:  stloc.2 list:   il_0022:  ldloc.0   il_0023:  ldc.i4.3   il_0024:  callvirt   instance !0 class [mscorlib]system.collections.generic.list`1::get_item(int32)   il_0029:  stloc.2   通过这两段il,我只是希望证明list和array对索引元素的方式是不同的。当然,我们无从知道microsoft对list方法get_item的实现。但是我们不难想象:   因为list是一个链表,所以我需要从第一个元素开始逐个next到所需索引的元素。这是一个耗时的过程。  1. 从空间扩展角度上来说:   数组必须要在初始化时分配固定的大小,比如说int[] a=new int[3];如果我们仅仅写int[] a=new int[];编译器就会无情地给我们报错。但是list由于空间不必连续,所以无须指定初始大小。   总结1: 当不确定大小时,最好使用list代替array。 2. 从操作角度上来看:   关于索引这个就不赘述了。   总结2:当需要大量的查找操作时,最好使用array。   对于插入(删除)操作,很多人是从插入(删除)的时间上分析,说list优于array,我觉得是不合理的。   更合理的解释应该是从两个角度分析(以插入为例):   <1> 指定位置插入指定元素:   对于array讲,有两套解决方案:   a. 使用一个新数组,n+1个元素重新赋值的过程。一个for循环,时间复杂度o(n)。   b. 在原数组上操作,那么首先需要为该数组预留空间,这是个很难办的事情。而且其后续元素的移动耗费时间复杂度仍未o(n)。   对于list来讲,很多人说复杂度就是o(1)。这其实是不合理的,因为list插入元素固然容易,但是在指定位置的插入,需要一个时间复杂度为o(n)的查找过程。   但是只考虑时间复杂度是不够的,我们要考虑总体的情况。如果使用新数组,不仅浪费了新的空间,而且需要反复的赋值过程,是n+1次。如果不使用新数组,预留空间实在太麻烦,因此综上所述,还是list好。   <2> 给出前一个节点,然后在后面插入元素。这个我的意思就是不仅仅给出了previousnode的value,还给出了他的next。这个情况我就不废话了,list的优势太大了。可是在实际情况中,这种情况的可能性几乎为零。   因此,总结3:当需要进行频繁的插入,删除操作时,最好使用list代替array。   另外,给出个不太重要的补充,由于list需要存储他下一个节点的地址,所以list比array相对起来浪费了更多的空间。 也就是说虽然使用list强类型范性,能够节约装箱拆箱时间,但查询速度会有很多问题。 在实际使用中,对变化不大,查询次数频繁的,我们应该考虑list外的情况 当然,就查询某个值的速度而言,还是 hashtable 或 dictionary 最快,当然这两者和我们在讨论的东西,结构完全不相同,没有可比性。毕竟数组,是节约空间,而hash表是散列的,牺牲空间来换取速度
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
陈一希起名含义够好不?
房县十堰Queen私人定制工作室怎么去啊,谁知
俄罗斯地跨______两洲,西临______海,东临__
基督教问题:上帝知道某个人的心里在想什么?(
凤岗公安分局出入境办证厅怎么去啊,我要去那
怎么用WORD做海报
通过质量控制的动态分析随时了解生产过程中的
进去的时候万象网管怎么结束进程
鱼滑怎么做好吃,鱼滑的吃法
请问沈阳周边花卉种植基地都在哪里?
勃艮第最顶级的酒庄有哪些
如果在邮政储蓄银行,汇款发现自己汇错,还能
桥头公安分局出入境办证厅地址在什么地方,我
现在某些大学生为了获得奖学金等评优评奖或者
我今天给孩子留了点怍业结果发现她都抄的答案
推荐资讯
苏宝同怎么死的
为了减轻家里的负担,他高中毕业后就外出打工
怎么介绍可以让别人觉得你是java大佬
眉山市太和镇永丰村村地址有知道的么?有点事
关于休闲的句子
妻子的父亲病重,怎样安慰老婆呢
客户从事融资融券交易期间,出现以下( )情
单选题MrGreenisnotinhisofficenow.Ca
男人是不是有了孩子之后才会成熟起来 才会有
以铁皮石斛保健养生取名
瞬去掉目念什么
梦见自已故的亲人呕吐是咋回事?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?