【Java】 ArrayList与LinkedList的区别

来源:互联网 发布:广州网络推广 编辑:程序博客网 时间:2024/05/16 23:58

在做一道ocjp题目时,老是做错,记了笔记,当时感觉理解了,但是下次再做时,又错了,原因是自己不能真正明白这两个List实现类的本质。
先把题目放上来:

A programmer has an algorithm that requires a java.util.List that provides an efficient implementation of add(0, object), but does NOT need to support quick random access. What supports these requirements?
A. java.util.Queue
B. java.util.ArrayList
C. java.util.LinearList
D. java.util.LinkedList
Answer: D

这道题给我的印象就是:does NOT need to support quick random access.(不需要支持快速随机访问)

1、先说下Queue和LinearList。

1、Queue我以前在书本上没见过,这次在eclipse上查了下,看起来很简单,只有几个方法。
这里写图片描述
2、LinearList这个我第一个想到了android的线性布局LinearLayout,在eclipse上也没有查到,放弃。

2、接下来重点说下ArrayList和LinkedList

网上有很多关于这两者的介绍和区别,以前一直没怎么看明白,现在也只是明白多了一点。摘抄一段百度知道的答案:

ArrayList和LinkedList是两个实现类,他们实现的方式不一样,其实LinkedList才是真正的链表(如果不清楚什么是链表,需要了解一下相关数据结构的知识,这不是一两句话能说清楚的),而ArrayList是用数组实现的,它不是真正的链表,在初始化的时候它先对数组设置一个初始容量,当数组空间不够的时候,它会重新构建一个容量更大的数组,然后把先前的元素拷贝进去。
ArrayList和LinkedList本质上的区别就是数组和列表这两种数据结构的区别。

前几天有机会和一位java资深工作者聊到了List,他给我画了个图,比较形像地说明了两者的区别。
下边这个图是我画的,比较丑,
这里写图片描述

ArrayList声明之后占用一整块内存,如果继续添加导致该内存无法存放数据,则会在空白内存中找一块更大的区域将数据整体复制过去。

LinkedList是一小块一小块内存通过链表连接起来的,故而LinkedList中添加数据要容易很多,不像ArrayList要把整块数据复制到内存中一个新的位置;但他的缺点也很明显,随机访问效率较低,因为他是通过一个接一个的hasNext()来判断是否有下一个数据,ArrayList是采用数组结构的,获取随机数很方便。

3.Queue和Stack

接下来还回到题目上,有个选项是Queue,Queue就像一个两头通的水管,一头只能进,另一头只能出。
Stack,就像一个水杯,只有一个口,这个口即是入口,也是出口,进和出不能同时发生。

0 0
原创粉丝点击