java中List、ArrayList、LinkedList的区别

     List接口是Collection的子接口,用于定义线性表数据结构。可以将List理解为存放对象的数组,只不过其元素个数可以动态的增加或减少。

    该集合的特点:元素可重复,并且有序,允许以下标的形式操作元素。

    List接口的两个常见实现类为ArrayList和LinkedList,分别用动态数组和链表的方式实现了List接口。

ArrayList和LinkedList的大致区别如下:
    1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
    2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 
    3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

    ArrayList内部是使用可増长数组实现的,所以是用get和set方法是花费常数时间的,但是如果插入元素和删除元素,除非插入和删除的位置都在表末尾,否则代码开销会很大,因为里面需要数组的移动。

    LinkedList是使用双链表实现的,所以get会非常消耗资源,除非位置离头部很近。但是插入和删除元素花费常数时间。


ArrayList

1.ArrayList底层采用数组实现使用带参数构造ArrayList象实际底层度10 Object类型数组
2.增加元素数超10ArrayList底层新数组度原数组1.5倍+1原数组内容复制新数组并且续增加内容都放新数组新数组容纳增加元素重复该程
3.于ArrayList元素删除操作需要删除元素续元素向前移代价比较高
4.集合能放置象引用放置原数据类型我需要使用原数据类型包装类才能加入集合 
5.集合放置都Object类型取Object类型必须要使用强制类型转换其转换真类型(放置进类型)


LinkedList

然而数组和数组列表都有一个重大的缺陷,这就是从数组的中间位置删除一个元素需要付出很大的代价,其原因是数组中处于被删除元素之后的所有元素都要向数组的前端移动。在数组的中间的位置插入一个元素也是如此。如下图:

 

这个问题就靠LinkedList(链表)来解决。链表将每个对象存放在独立的节点中,每个节点还存放着序列中上一个节点的引用和下一个节点的引用,如下图:

这样,从链表中间删除一个元素是很轻松的操作,即需要对呗删除元素附近的节点更新一下即可,如下图:

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章