Java中Array、List的区别

原创 2016年08月31日 09:50:24

Array、List的区别

Array—是基于索引(index)的数据结构,它使用索引在数组中搜索和读取数据是很快的。Array获取数据的时间复杂度是O(1),但是要删除数据却是开销很大

的,因为这需要重排数组中的所有数据

List—是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式,它继承Collection。

List有两个重要的实现类:ArrayList和LinkedList

ArrayList:可以看作是能够自动增长容量的数组,利用ArrayList的toArray返回一个数组;Arrays.asList返回一个列表

1、ArrayList底层采用数组实现,当使用不带参数的构造方法生成ArrayList对象时,实际上会在底层生成一个长度为10的Object类型的数组

2、如果增加的元素个数超过10个,那么ArrayList底层会生成一个新的数组,长度为原数组的1.5倍+1,然后将原数组的内容复制到新数组中,并且后续增

加的内容都会放到新的数组当中,当新的数组无法容纳增加的元素时,重读该过程

3、对于ArrayList元素的删除操作,需要将被删除元素的后续元素向前移动,代价比较大

4、集合当中只能放置对象的引用,无法放置原生数据类型,我们必须使用原生数据的包装类才能加入到集合当中

5、集合当中都是Object类型,因此取出来的也是Object类型,那么必须要使用强制类型转化将其转换成真正的类型(放置进去的类型)

LinkedList:是一个双链表,在添加和删除元素时具有比ArrayList更好的性能.但在get与set方面弱于ArrayList.当然,这些对比都是指数据量很大或者操作很频繁

的情况下的对比,如果数据和运算量很小,那么对比将失去意义


LinkedList和ArrayList区别

LinkedList和ArrayList的差别主要来自于Array和LinkedList数据结构的不同。如果你很熟悉Array和LinkedList,你容易得出下面的结论:

1) 因为Array是基于索引(index)的数据结构,它使用索引在数组中搜索和读取数据是很快的。Array获取数据的时间复杂度是O(1),但是要删除数据却是开销很大的,因为这需要重排数组中的所有数据。

2) 相对于ArrayList,LinkedList插入是更快的。因为LinkedList不像ArrayList一样,不需要改变数组的大小,也不需要在数组装满的时候要将所有的数据重新装入一个新的数组,这是ArrayList最坏的一种情况,时间复杂度是O(n),而LinkedList中插入或删除的时间复杂度仅为O(1)。ArrayList在插入数据时还需要更新索引(除了插入数组的尾部)。

3) 类似于插入数据,删除数据时,LinkedList也优于ArrayList。

4) LinkedList需要更多的内存,因为ArrayList的每个索引的位置是实际的数据,而LinkedList中的每个节点中存储的是实际的数据和前后节点的位置。

什么情况下用LinkedList或者使用ArrayList

1) 你的应用不会随机访问数据。因为如果你需要LinkedList中的第n个元素的时候,你需要从第一个元素顺序数到第n个数据,然后读取数据。

2) 你的应用更多的插入和删除元素,更少的读取数据。因为插入和删除元素不涉及重排数据,所以它要比ArrayList要快。

以上就是关于ArrayList和LinkedList的差别。你需要一个不同步的基于索引的数据访问时,请尽量使用ArrayList。ArrayList很快,也很容易使用。但是要记得要给定一个合适的初始大小,尽可能的减少更改数组的大小


版权声明:本文为博主原创文章,未经博主允许不得转载。

Java中List与Array的转换

在Java项目开发过程中,集合之间的互相转换是非常常见的,其中两个比较典型的转换是List和Array之间的转换,本文主要介绍这二者之间的转换、其中存在的一些问题以及解决方案,本文JDK版本为1.8。...
  • Quincuntial
  • Quincuntial
  • 2016年09月02日 14:02
  • 2281

Java List与数组之间的转换

1 数组转换为List 调用Arrays类的静态方法asList。 asList public static List asList(T... a) Returns a fixed-si...
  • kingzone_2008
  • kingzone_2008
  • 2012年12月27日 17:36
  • 191740

java中数组与List相互转换的方法

1.List转换成为数组。(这里的List是实体是ArrayList)   调用ArrayList的toArray方法。  toArray  public T[] toArray(T[] a)返回一...
  • justfornn413
  • justfornn413
  • 2010年03月05日 09:59
  • 304259

Java Array、List、Set互相转化

Java ArrayListSet互相转化 ArrayListSet互转实例 1 ArrayList互转 2 ListSet互转 3 ArraySet互转 ArraysasList 和 Collect...
  • u014532901
  • u014532901
  • 2017年12月16日 15:23
  • 817

List集合与Array数组之间的互相转换

数组转换成List集合 方法一 笨方法就是通过add把数组中的数据循环添加到List集合中 List mlist = new ArrayList(); String[] array ...
  • zhuwentao2150
  • zhuwentao2150
  • 2016年06月19日 21:08
  • 22364

关于Array和List的区别(转载)

 Array和List都属于顺序表。    Array是一段连续的存储结构int[] i=new int[3]i其实记录的是数组的首地址,而i[1]其实相当于在i的地址的基础上加上1个整数的地址偏移,...
  • starseeker7
  • starseeker7
  • 2009年03月29日 08:47
  • 14696

java数组和list互转方法

1.List转换成为数组。(这里的List是实体是ArrayList) List list = new ArrayList(); list.add("1"); list.add("2"); fina...
  • tomcat_2014
  • tomcat_2014
  • 2016年04月01日 15:15
  • 625

Java8数组和List相互转换

使用Java 1.8中的循环转换数组为List,代码: private List arrayToList(T[] objects) { return Stream.of(objects).m...
  • u010429286
  • u010429286
  • 2016年11月28日 15:00
  • 1711

java 集合类Array、List、Map区别和联系

java集合类主要分为以下三类:第一类:Array、Arrays第二类:Collection:List、Set第三类:Map:HashMap、HashTable 一、Array , ArraysJav...
  • blacksource
  • blacksource
  • 2009年07月25日 21:55
  • 11523

Java中ArrayList类详解

1、什么是ArrayList  ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处:  动态的增加和减少元素  实现了ICollectio...
  • lskyne
  • lskyne
  • 2013年05月23日 18:23
  • 76503
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java中Array、List的区别
举报原因:
原因补充:

(最多只允许输入30个字)