关于Array和List的区别

作者&投稿:通品 (若有异议请与网页底部的电邮联系)
数组和列表有什么区别~

一、类型不同:
数组列表和数组非常相似,不过数组列表的容量可以动态变化,所以数组列表也是集合类型中使用频率较高的类型。
Student类型的数组列表,数组列表相关的方法都由ClassRoom类的实例方法调用,这样更有利于向外界隐藏实现程序细节。
二、元素不同:
Array数组可以包含基本类型和对象类型,ArrayList却只能包含对象类型。 但是需要注意的是:Array数组在存放的时候一定是同种类型的元素。ArrayList就不一定了,因为ArrayList可以存储Object。

数组中的元素
数组中的所有元素都具有相同类型(这一点和结构或类中的字段不同,它们可以是不同类型)。数组中的元素存储在一个连续性的内存块中,并通过索引来访问(这一点也和结构和类中的字段不同,它们通过名称来访问)。
数组元素并非只能是基元数据类型,还可以是结构、枚举或类。
以上内容参考:百度百科-数组

在Java中 Array是数组,List是集合。
数组直接可以使用,List是借口,需要使用实现类,比如:ArrayList。
使用方式也不同,Array数组使用下标获取元素,List是get(index)
初始化Array数组必须指定大小,不灵活。List 可以自己扩充大小,方便。

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<int32>::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<T>强类型范性,能够节约装箱拆箱时间,但查询速度会有很多问题。
在实际使用中,对变化不大,查询次数频繁的,我们应该考虑list<T>外的情况
当然,就查询某个值的速度而言,还是 Hashtable 或 Dictionary 最快,当然这两者和我们在讨论的东西,结构完全不相同,没有可比性。毕竟数组,是节约空间,而hash表是散列的,牺牲空间来换取速度


dedecms array循环中判断循环到第四个<LI> 标签的时候换样式<li id...
您好,您这样写:currentstyle="<li class='hover'><a href='~typelink~' ~rel~><span>~typename~<\/span><\/a><\/li>这句话的意思就是一个样式,和下边的 <li><a href='[field:typeurl\/]' [field:rel\/]><span>[field:typename\/]<\/span><\/a><\/li> 这个是一样的作用,一般都是不...

已知列表li=[1,2,3,5,3,5,7,4,7,8],怎样编写程序实现删除列表li中重复数...
if (_temp.indexOf(this[i]) === -1) { _temp.push(this[i])} } return _temp;} li.unique();文艺:var li = [1,2,3,5,3,5,7,4,7,8];Array.from(new Set(li))

JSP页面中怎么遍历arraylist中的数组数据
有两种方法,第一种的话,用迭代器 ArrayList arrli=new ArrayList();for(Iterator is=arrli.iterator();is.next()){ System.out.println(is.next());} 第二种方法是采用struts标签中的<logic:iterator>进行遍历,这个相对简单些。其中name属性代表后台传来的list结果集属性名。<logic:iterate id=...

如何用正则表达式把目标替换成数组中的值?
如果是用javascript,这样的替换很容易,因为 javascript 有这样的语法 str.replcae(\/patern\/,function(...){...});php 似乎不能内嵌匿名函数,所以这样的替换不大方便。这样:<?php arr = array('articleid'=> 1,'time'=> '2009-11-22 05:11:52');teststr = "<li>[field:time \/]<\/l...

js怎么能把数组中的数据放到放到ul里面的li里面去形成列表
<script>var arr=new Array("数据一","数据二","数据三","数据四","数据五");var list="";for (var i=0;i<arr.length;i++){ list +="<li>"+arr[i]+"<\/li>";}document.getElementById('box').innerHTML = list;<\/script><ul id='box'><\/ul> ...

CAD里面测量长度的快捷键是什么
CAD里面测量长度的快捷键:有一个是DI,直接在线上就可以测量了 第二种是PI需要画一条线,找特性,快捷键ctrl+1,长度就可以出来了。第三种方法,是LI和第二种方法相似。cad快捷键是指在CAD软件操作中,为方便使用者,利用快捷键代替鼠标。可以利用键盘快捷键发出命令,完成绘图,修改,保存等操作。这些...

java中char类型的Arraylist如何转化成一个string?
java中char类型的arraylist转化成String,可以将Arrayli进行逐个遍历,每个字符转换成string类型,如下:package secondpackage;import java.util.ArrayList;import java.util.List;\/** * * @author 你好邱林和 * @date 2015年12月17日09:12:09 * *\/public class ceshi2 {public static void main...

JAVA中复制数组的方法是什么?求详解并举例子!
该方法将指定的源数组sArray中的length个元素复制到目标数组dArray中,复制从原数组sArray的指定位置srcPos开始,把原数组中的元素复制到目标数组中,目标数组的位置从destPos位置处开始向后。复制数组举例:public class Li{ public static void main(String args[]){ int k,a1[]={5,4,3,2,1};i...

JAVA中复制数组的方法是什么?求详解并举例子!光举例子不给
该方法将指定的源数组sArray中的length个元素复制到目标数组dArray中,复制从原数组sArray的指定位置srcPos开始,把原数组中的元素复制到目标数组中,目标数组的位置从destPos位置处开始向后。复制数组举例:public class Li{ public static void main(String args[]){ int k,a1[]={5,4,3,2,1};i...

jquery 随机排列<li> 在线等 急。。。
var array = p.children ('li'); array.sort (function () { var rand = Math.random (); if (rand > 0.5) { return 1; } else { return -1; } }); array.each (function (i, dom) { p.append ($ (this)); }); })...

沂水县13213729772: Java中List和ArrayList的区别 -
冉启妥抒: Java中List和ArrayList的区别如下:1. List是接口,ArrayList是类.2. List继承Collection, Iterable这两个接口,而ArrayList则是继承AbstractList,实现List、RandomAccess、Cloneable、Serializable接口.3. ArrayList除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小.

沂水县13213729772: Array和ArrayList的异同点 -
冉启妥抒: Array和ArrayList的异同点 一、Array和ArrayList的区别 #1. Array类型的变量在声明的同时必须进行实例化(至少得初始化数组的大小),而ArrayList可以只是先声明. 如: int[] array = new array[3]; 或 int[] array = {1,2,3}; 或 ArrayList myList = ...

沂水县13213729772: List和ArrayList的区别 -
冉启妥抒: List是一个接口,是Collection接口的一个子接口.是一个有序的集合.而ArrayList是List的一个实现类,可以实现数组大小的可变,可以很方便的进行增加和删减数组内元素的操作.List list=new ArrayList();这种形式成为向上转型,ArrayList实现了List接口,可以看成是从List继承而来,一个子类的对象可以指向它父类.比如,狗从动物继承而来,狗是一只动物,所以狗的对象可以当作一只普通的动物来看待.

沂水县13213729772: list 和 array 有什么区别 -
冉启妥抒: 面向对象语言有个好处就是我们可以使用现成的类 或者代码 而不用自己在去写 所以我们编写的程序就要有通用性 ArrayList list=new ArrayList() 如果在其他地方用了list变量 当我们由于需要改变list的类型时 就会影响到用到list变量的地方 也要我们手动更改(因为每种List实现同种功能的方法是不一样的) List list=new ArrayList()是用一个具体类指向了 他的父类 这样当换一个具体类的时候 就不需要改其他地方了因为这些具体类都实现了List接口 所以都会实现List接口中的方法 所以凡是用到父类的地方都可以用其子类 即使子类不同 但是都包含父类的方法不会出现错误

沂水县13213729772: Array和ArrayList之间的区别 -
冉启妥抒: Array可以包含基本类型和对象类型,ArrayList只能包含对象类型.Array大小是固定的,ArrayList的大小是动态变化的.ArrayList提供了的方法和特性,比如:addAll(),removeAll(),iterator()等等.对于基本类型数据,集合使用自动装箱

沂水县13213729772: List和Array有什么不同?
冉启妥抒: Array是数组,创建的时候需要指定长度. List是表示可通过索引访问的对象的强类型列表.

沂水县13213729772: python中的list和array的不同之处 -
冉启妥抒: python自己没有array这个数据结构.据我所知array是python的numpy工具包定义的. python的list就是常说的列表. array和list主要的不同是,因为numpy是一个数值计算工具包,numpy的很多函数是可以直接在array上使用的,但不能用在list上.

沂水县13213729772: 关于Array和List的区别
冉启妥抒: 在Java中 Array是数组,List是集合.数组直接可以使用,List是借口,需要使用实现类,比如:ArrayList.使用方式也不同,Array数组使用下标获取元素,List是get(index) 初始化Array数组必须指定大小,不灵活.List 可以自己扩充大小,方便.

沂水县13213729772: array和arraylist的区别 -
冉启妥抒: 一、Array的用法与数组几乎一样,可以看做是数组.在定义的时候需要指定长度;ArrayList的用法与普通集合一样,定义的时候不需要指定长度;如:Array[] animalArray = new Array[2];ArrayList animalArrayList = new ArrayList();

沂水县13213729772: 关于ArrayList和List的区别 -
冉启妥抒: List是一个接口,而ArrayList是一个类,它实现了List接口.所以List不能被构造,List list=new List()这种写法是错误的,而ArrayList就可以被构造.List list = new ArrayList();这句创建了一个ArrayList的对象后把向上转型成了List.此时它是一个List对象了,有些ArrayList有但是List没有的属性和方法,它就不能再用了. 而ArrayList list=new ArrayList();创建一对象则保留了ArrayList的所有属性.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网