为了面试--集合容器1:list中LinkedList和ArrayList

不面试不知道自己差的有多远,不过没事我会一点点迎头赶上的

面试现在超级多的问原理,这个原理那个原理,问的最多的是集合的原理,list,set,map,那么今天就偷偷的抽出一下午的时间把我最近看到的集合的知识梳理一下.

1.数组是比不可少的了解的知识点

  XXX[n]-->这个是数组的样子,首先数组集合会存储数组的起始位置,然后,会通过下角标来取出偏移量,来获取对应的数据

  听不懂吧,听不懂就对了!

  数组[1,2,3,4,5,6]

  首先吧数组想象成一个连续的空间-->[空间已用][空间0-->1][空间1-->2][空间2-->3][空间3-->4][空间4-->5][空间5-->6][空间6][空间7][空间8][空间9]

  数组会记录空间的开始位置指针会指向-->[空间已用]{指针}[空间0-->1][空间1-->2][空间2-->3][空间3-->4][空间4-->5][空间5-->6][空间6][空间7][空间8][空间9]

  如果我想要获取,数组[2]的数据需要的是获取:指针的位置+偏移量(2)*偏移单位(不通的数据类型所占用的数据类型是不一样的),得到的这个新的指针位置就是数据[2]的位置

2.ArrayList 由于数组是定长的因此引入了今天的第一个集合ArrayList

  ArrayList本身就是由数组来实现的一个集合,它相当于一个可以变长的数组,而它的长度初始是10位,而当超出10位的时候,会在原有的基础上乘以1.5.

扫描二维码关注公众号,回复: 3705366 查看本文章

  由于Arraylist的空间连续的要求,因此当他扩容的时候如果空间不满足要求的话,他需要到新的位置申请空间,并且复制过去.

3.LinkedList,想要了解LinkedList就必须要了解双向链表结构

大体的理解可以理解为[空间1]-->[上一个数据的位置|数据|下一个数据的位置],单个空间被分为了三个部分,这样就可以不用空间的连续了.

当进行插入和删除的时候,只需要去修改前后的指针的位置就可以,但是由于表不是连续的,导致想要找到第多少个数据的时候会很慢

对比ArrayList和LinkedList的区别在于:

1.ArrayList,底层实现是数组,要求数据连续的,由于连续的原因,想要获取某一个下标的方法就比较简单,只需要计算偏移量就可以了,但是相对的增加和删除就比较麻烦,因为需要保证连续性,后续的要整体进行位移

2.LinkedList底层是双向链表的结构,所以删除和插入比较简单,但是由于不连续,所以要获取中间的某一个值的时候会比较麻烦,因为不论你要获取第几个都需要从最开始的位置开始读,一直读取到需要的那个位置然后返回.

小结:网上说,如果只是for循环遍历整个list的话两个的速度差距不会太大,我还没有试过,等试过之后我在说

   

猜你喜欢

转载自www.cnblogs.com/syf55555/p/9674966.html