浅谈LinkList和ArrayList

一:前言

    在集合数据结构里,我们常用的两种数据结构LinkList和ArrayList。他们底层都是Object数据。在我们实际工作中,我们常常混用两种数据结构,或者有些初级开发者基本就不用LinkList。好像是刚入职的我一样。随着我们工作时间长了以后。我们对于代码颗粒度追究细致发现,二者在实际开发中都有极其重要作用,只要用的好,你的代码就会有质的提升,下来我们就从源码角度来对两中数据结构进行解剖。

二:ArrayList

 1.基本介绍

 

 

   首先我们看下它的构造,初步发现,继承了AbstractList,实现了RandomAccess、Serializable和Cloneable接口,细心发现还是这么麻烦。所有我们会想一个数据结构直接实现就好了为啥搞这么多的东东,所有下来我们来解剖它这些是啥东东

       RandomAccess:我们打开后发现,竟然是一个空接口,这不是没事找事嘛,事实真是是这样吗?其他是我们根据他上面注释可以知道他是一个标识接口。用于区分LinkList的。具体的我们下面会有介绍,作用二用于标识某个类是否支持 随机访问(随机访问,相对比“按顺序访问”)。一个支持随机访问的类明显可以使用更加高效的算法

      Serializable:说明可以序列化,但是我们发现里面elementData是用transient修饰。

      Cloneable:cloneable是一个标记接口。只有实现这个接口,才能重写object中clone()方法,才能克隆成功,要不然就会报CloneNotSupportedException。我们在实际开发中也可以利用clone实现深和浅复制。

      AbstractList:主要实现在这里,我们重点研究对象,它实现List接口,继承了AbstractCollectione,它内部唯一一个abstract 方法是get(int index)。从字面上看这是获取的方法,子类必须实现它,一般是作为获取元素的用途,除此之外,如果子类要操作元素,还需要重写 add(), set(), remove() 方法,因为 AbstractList 虽然定义了这几个方法,但默认是不支持的,在其默认实现里,直接是抛出UnsupportedOperationException 异常的,这里的处理跟AbstractMap 的 put() 方法有异曲同工之妙处,很大功能就是官方考虑到也许会有子类需要这些方法不可修改,需要修改的话直接重写即可。AbstractList 中提供了两个迭代器的实现类,默认实现了迭代器接口,实现了对元素的遍历,它们就是Itr 和其子类 ListItr,分别来了解一下。先看Itr类,Itr 实现了 Iterator 接口,重写了 next() 和 remove() 方法,ListItr 是 Itr 的子类,在Itr 的基础上增强了对元素的操作,多了指定索引的赋值,以及向前读取,add 和 set 的方法。AbstractList 提供了两个子类,可用于切分集合序列,这两个类是 SubList 和 RandomAccessSubList ,SubList 的内部实现和 AbstractList 很相似,无非是传递了两个变量,初识位置和结束位置来截取集合,RandomAccessSubList 是 SubList 的子类,内部实现直接沿用父类,只是实现了RandomAccess接口,一样的是,RandomAccessSubList 实现了一个接口RandomAccess,打开后发现是空的,没有任何实现。它的作用是用于标识某个类是否支持 随机访问(随机访问,相对比“按顺序访问”)。一个支持随机访问的类明显可以使用更加高效的算法。例如遍历上,实现RandomAccess 接口的集合使用 get() 做迭代速度会更快,比起使用迭代器的话。

三:LinkList

  1.基本介绍:

 

 

   Serializable和cloneable和ArrayList一样不做重复阐述了。

   AbstractSequentiaList:我们发现他的get方面使用重写迭代器方法,所有他的查询效率没有ArrayList这种随机访问效率高。

        Deque:双端队列来实现队列与栈,是一个双向链表

四:区别

LinkList:

  1.有特定方法:addFirst(),addLast(),getFirst(),removeFirst()等。

  2.采用双向链表实现的。

  3.采用队列实现插入和删除

ArrayList:

  1.索引的方式来快速定位对象的位置

五:总结

  查询ArrayList快,新增和删除LinkLink快。

posted @ 2020-06-12 18:09  无尽起源  阅读(995)  评论(0编辑  收藏  举报