精华内容
下载资源
问答
  • arrylist和linkedlist
    2021-03-28 15:50:21

    java 中arrylist和linkedlist有什么区别?

    Arrylist是动态数组的数据结构的实现
    Arrylist在随机查询的时候,比linkedlist 的效率高

    更多相关内容
  • 缺点:插入删除元素比较麻烦(数组的存储是连续的,插入删除元素需要移动数组部分元素) 2.LinkedList LinkedList的底层实现为双向链表 优点:1.不需要担心元素的多少(双向链表可以无...

    1.ArrayList

    ArrayList底层实现为数组。默认大小为10,1.5倍扩容

    优点:1.长度可以随着元素的增加而加长  2.查找特定元素比较快,这归功于数组的索引。

    缺点:插入和删除元素比较麻烦(数组的存储是连续的,插入和删除元素需要移动数组部分元素)

    2.LinkedList

    LinkedList的底层实现为双向链表

    优点:1.不需要担心元素的多少(双向链表可以无限延长) 2.插入和删除元素比较简单(不需要移动内存,只需要改变指针指向即可)

    缺点:查找特定元素比较麻烦(链表内存不是连续的,需要从表头开始,沿指针方向一个一个查)

    总结

    ArrayList更适合查找较多,插入和删除较少的情况。LinkedList正好相反,更适合于插入和删除较多,查找较少的情况。

     

    转载于:https://www.cnblogs.com/zgmzbhqa/p/10129023.html

    展开全文
  • 假如我把右上的一个元素删掉,可以看到左上右下的两个元素会直接连上,至于它们两个是怎么牵上手的,这里不多讲了,你懂的…………….  同理,在下面增加一个的时候,也是同一个道理,也就是说,当你增加或...

    (一)我们知道ArrayList是List接口的一个实现类,它的特点是查询效率高,增删效率低,线程不安全 ;

               因为ArrayList底层是封装了一个数组,它是用数组实现的。 

               数组在内存中的存储方式:


    现在定义一个int[] a数组,假设它的首地址是2000,int类型占4个字节,所以a[0]的首地址是2000,a[1]的首地址就是2004,以此类推….到a[n] 
    所以上面的这张图,就很形象的解释了,为什么ArrayList的查询效率高,每次只需要一个偏移量就可查到 
    但是它的增删效率为什么会低呢? 
    再往下看:


    如果想在这个数组的中间或是第一项前插入一项,它的插入过程是以迭代的方式,让它后面的每一项依次往后挪,就如图上的要在第二项的位置上插入一项,其实这个过程是比较慢的,如果是你每次都在最后插入,这是个例外,因为它不用再去影响其它的元素,直接插在最后面;当然删也是同一个道理 。


    (二)LinkedList 它的特点是:增删效率比较高,而查询效率低 
    LinkedList是底层用双向循环链表实现的List,链表的存储特点是不挨着,它存储的每个元素分为三段:上一项的地址、下一项的地址、元素的内容,而数组却没有上一项,下一项这种情况 ,因为数组只需要根据一个偏移量,就可以找到下一项或上一项。

    双向链表的底层结构图:


    每个元素在内存中的排列像是随机的,中间没有连续性,通过地址来找到上一项或下一项,从图上应该可以理解了 
    那么现在问题来了,如果查询LinkedList中的某一项,肿么办? 
    没有好办法,只能把元素全部过一遍,这样就会比较的慢 
    而它的好处体现在它的增删效率非常的快,为什么呢? 
    看下面的图解:


    假如我把右上的一个元素删掉,可以看到左上和右下的两个元素会直接连上,至于它们两个是怎么牵上手的,这里不多讲了,你懂的……………. 
    同理,在下面增加一个的时候,也是同一个道理,也就是说,当你增加或删除一个元素的时候,在LinkedList里,它最多只会影响两个元素,而不像ArrayList里,当在中间插入一个元素时,它后面的所有的元素都要受到影响,那么这样在一定程度上LinkedList的增删效率就会明显的高于ArrayList的


    代码证明:

    模版方法设计模式来测试ArrayList与LinkedList的增删查的效率:

    package com.jvm.test;


    import java.util.List;
    import java.util.ArrayList;
    import java.util.LinkedList;


    abstract class Template{
    public abstract void test();
    public void template(){
    long start = System.currentTimeMillis();
    test();
    long end = System.currentTimeMillis();
    System.err.println(end-start);
    }
    }






    public class SocketTest {


    public static void main(String[] args) {
    Template t1 = new Template() {

    @Override
    public void test() {
    List list = new ArrayList();
    for(int i=0;i<10000;i++){
    //测试ArrayList增加
    list.add(0, "a");
    }
    }
    };
    Template t2 = new Template() {

    @Override
    public void test() {
    List list = new LinkedList();
    for(int i=0;i<10000;i++){
    //测试LinkedList的增
    list.add(0, "a");
    }
    }
    };

    Template t3 = new Template(){
                public void test(){
                    List list = new ArrayList();
                    for(int i = 1; i < 10000 ; i++){
                        list.add("a");
                    }
                    for(int i = 1; i< 10000 ; i++){
                        //测试ArrayList的查
                        list.get(list.size()/2);
                    }
                }
            };

    Template t4 = new Template(){
                public void test(){
                    List list = new LinkedList();
                    for(int i = 1; i < 10000 ; i++){
                        list.add("a");
                    }
                    for(int i = 1; i< 10000 ; i++){
                        //测试LinkedList的查
                        list.get(list.size()/2);
                    }
                }
            };
            
            t1.template();
            t2.template();
            t3.template();
            t4.template();
            
    }

    }


    可以看到最终的结果: 
    测试ArrayList的增的时间:15ms; 
    测试LinkedList的增的时间:4ms;(差4倍) 
    测试ArrayList的查的时间:4ms;(差30倍) 
    测试LinkedList的查的时间:113ms;

    展开全文
  • ArrayList与LinkedList区别

    2022-03-22 21:35:08
    1. LinkedList和ArrayList的差别主要来自于Array和LinkedList数据结构的不同。ArrayList是基于数组实现的,LinkedList是基于双链表实现的。另外LinkedList类不仅是List接口的实现类,可以根据索引来随机访问集合中的...

    1. LinkedList和ArrayList的差别主要来自于Array和LinkedList数据结构的不同。ArrayList是基于数组实现的,LinkedList是基于双链表实现的。另外LinkedList类不仅是List接口的实现类,可以根据索引来随机访问集合中的元素,除此之外,LinkedList还实现了Deque接口,Deque接口是Queue接口的子接口,它代表一个双向队列,因此LinkedList可以作为双向队列 ,栈(可以参见Deque提供的接口方法)和List集合使用,功能强大。

    2. 因为Array是基于索引(index)的数据结构,它使用索引在数组中搜索和读取数据是很快的,可以直接返回数组中index位置的元素,因此在随机访问集合元素上有较好的性能。Array获取数据的时间复杂度是O(1),但是要插入、删除数据却是开销很大的,因为这需要移动数组中插入位置之后的的所有元素。

    3. 相对于ArrayList,LinkedList的随机访问集合元素时性能较差,因为需要在双向列表中找到要index的位置,再返回;但在插入,删除操作是更快的。因为LinkedList不像ArrayList一样,不需要改变数组的大小,也不需要在数组装满的时候要将所有的数据重新装入一个新的数组,这是ArrayList最坏的一种情况,时间复杂度是O(n),而LinkedList中插入或删除的时间复杂度仅为O(1)。ArrayList在插入数据时还需要更新索引(除了插入数组的尾部)。

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

    综合:ArrayList在查找方面速度快。LinkedList在增删速度快。

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

    使用场景:

    (1)如果应用程序对数据有较多的随机访问,ArrayList对象要优于LinkedList对象;

      ( 2 ) 如果应用程序有更多的插入或者删除操作,较少的随机访问,LinkedList对象要优于ArrayList对象;

    (3)不过ArrayList的插入,删除操作也不一定比LinkedList慢,如果在List靠近末尾的地方插入,那么ArrayList只需要移动较少的数据,而LinkedList则需要一直查找到列表尾部,反而耗费较多时间,这时ArrayList就比LinkedList要快。
     

    展开全文
  • ArrayList和LinkedList的区别、优缺点以及应用场景

    万次阅读 多人点赞 2018-12-09 09:17:21
    ArrayList和LinkedList都是实现了List接口的容器类,用于存储一系列的对象引用。他们都可以对元素的增删改查进行操作,那么他们区别、优缺点应用场景都有哪些呢?我们通过源码数据结构来说明一下 ArrayList...
  • vector、ArryListLinkedList的区别与联系 vectory类:底层 采用数组结构算法,使用了线程锁(synchronized),线程安全,但是性能相对ArryList比较低。 ArryList类:底层采用数组结构算法,没有使用线程锁,线程...
  • java集合框架05——ArrayList和LinkedList的区别

    万次阅读 多人点赞 2016-04-13 20:39:09
    前面已经学习完了List部分的源码,主要是ArrayList和LinkedList两部分内容,这一节主要总结下List部分的内容。 List概括 先来回顾一下List在Collection中的的框架图: 从图中我们可以看出: 1. List是一个接口,它...
  • ArrayList和LinkedList的区别

    千次阅读 2022-03-15 09:24:40
    arraylist和linkedlist的区别是:数据结构不同,效率不同,自由性不同,主要控件开销不同 1、数据结构不同 ArrayList是Array(动态数组)的数据结构,LinkedList是Link(链表)的数据结构。 2、效率不同 当随机访问List...
  • ArrayList和LinkedList区别及使用场景

    万次阅读 多人点赞 2018-09-07 18:51:40
    1. LinkedList和ArrayList的差别主要来自于Array和LinkedList数据结构的不同。ArrayList是基于数组实现的,LinkedList是基于双链表实现的。另外LinkedList类不仅是List接口的实现类,可以根据索引来随机访问集合中的...
  • 操作List向指定位置添加元素时,若插入的位置在前半段或后半段部分使用 LinkedList进行插入,若插入位置在中间使用ArrayList进行插入性能较好,若 插入的数据在末尾 LinkedList和ArrayList的速率大致相同。...
  • 谈ArrayList和LinkedList的区别

    千次阅读 2020-08-11 15:20:39
    2.对于随机访问getset,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。 3.对于新增删除操作addremove,LinedList比较占优势,因为ArrayList要移动数据。 时间复杂度比较: 首先一点关键的是,...
  • Java——集合之List、ArrayList、LinkedList
  • ArrayList与LinkedList遍历方式对比及List遍历技巧ArrayList遍历方式for loopfor-each loopIteratorListIteratorjava8新特性:forEachArrayList遍历方式分析LinkedList遍历方式for loopfor-each ...
  • 虽然这样多的实现类,但是一般我们用的是ArrayList 和LinkedList 这两个,所以我们讲解一下这两个实现类。 ArrayList 因为list接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素...
  • 1、不存在线程安全时,查找元素用的多:ArrayList //默认创建一个ArrayList集合 List list = new ArrayList<>(); //创建一个初始化长度为100的ArrayList集合 ...2、不存在线程安全时,增加删除元素用的多:L
  • ArrayList与LinkedList的区别

    千次阅读 2022-02-12 09:01:33
    ArrayList 是基于数组实现的,LinkedList 是基于双向链表实现的,ArrayList 在新增删除元素时,因为涉及到数组复制,所以效率比 LinkedList 低,而在遍历的时候,ArrayList 的效率要高于 LinkedList。 ArrayList ...
  • 方法1: Collections.synchronizedList(new LinkedList()) Collections.synchronizedList(new ...方法2: LinkedList和ArrayList换成线程安全的集合,如CopyOnWriteArrayList,ConcurrentLinkedQueue… HashMap 换成 Co
  • LinkedList和ArrayList

    2021-04-26 15:51:02
    List的两个最重要的子类分别是LinkedList和ArrayList。 ArrayList 基本概念 ArrayList的底层是一个长度可以动态增长的object数组,并且实现了三个没有方法的接口,RandomAccess、Cloneable、java.io.Serializable。 ...
  • SynchronizedCollection实现了Collection接口,SynchronizedList包含一个List对象,对List的访问修改方法进行了一些封装,在封装的方法中会对list使用同步锁加锁,然后再进行存取修改操作。使用方法如下L...
  • ArrayList、 LinkedList 和 Vector都实现了List...所以,LinkedList和ArrayList之前的区别主要就是数组和链表的区别。 所以,LinkedList和ArrayList相比,增删的速度较快。但是查询和修改值的速度较慢。同时,Linke
  • ArryList vs LinkedList

    2014-03-27 11:26:00
    references: ... http://stackoverflow.com/questions/322715/when-to-use-linkedlist-over-arraylist LinkedList and ArrayList are two diff...
  • 解决ArrayList、LinkedList线程安全方法 1、继承Arraylist,然后重写或按需求编写自己的方法,这些方法要写成synchronized,在这些synchronized的方法中调用ArrayList的方法。 2、使用Collectio
  • ArrayList LinkedList 的区别

    千次阅读 2022-03-21 15:48:31
    1. 首先,他们的底层结构不同。 ...正因为底层数据结构的不同,他们适用的场景不同,ArrayList 更适合随即查找,LinkedList 更适合删除添加,查询、添加、删除的时间复杂度不同。 2. ArrayList

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,410
精华内容 564
关键字:

arrylist和linkedlist