java面试题23 牛客ArrayLists和LinkedList的区别,下述说法正确的有?
A ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
B 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
C 对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。
D ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间。
懵逼树上懵逼果,懵逼树下你和我
查询
LinkedList查询用的遍历,AyyayList查询用的是数组下标,所以对于查询ArrayList性能高于LinkedList
新增
新增在末尾或者中间就是ArrayList比LinkedList快,如果在最前面就是LinkedList比ArrayList快
测试一下新增在末尾
public static void main(String[] args){int flag = 100000;ArrayList aList = new ArrayList(flag);LinkedList lList = new LinkedList();Long start1 = System.currentTimeMillis();for(int i=0; i<flag;i++)aList.add("a");System.out.println(System.currentTimeMillis() - start1);Long start2 = System.currentTimeMillis();for(int i=0; i<flag;i++)lList.add("a");System.out.println(System.currentTimeMillis() - start2);
}
测试一下新增在中间
public static void main(String[] args){int flag = 10000;ArrayList aList = new ArrayList(flag);LinkedList lList = new LinkedList();Long start1 = System.currentTimeMillis();for(int i=0; i<flag;i++){if(i < flag / 2)aList.add("a");elseaList.add(flag / 2, "a");}System.out.println(System.currentTimeMillis() - start1);Long start2 = System.currentTimeMillis();for(int i=0; i<flag;i++){if(i < flag / 2)lList.add("a");elselList.add(flag / 2, "a");}System.out.println(System.currentTimeMillis() - start2);
}
测试一下新增在开始
public static void main(String[] args){int flag = 10000;ArrayList aList = new ArrayList(flag);LinkedList lList = new LinkedList();Long start1 = System.currentTimeMillis();for(int i=0; i<flag;i++){aList.add(0 ,"a");}System.out.println(System.currentTimeMillis() - start1);Long start2 = System.currentTimeMillis();for(int i=0; i<flag;i++){lList.add(0."add");}System.out.println(System.currentTimeMillis() - start2);
}
修改
修改在末尾或者中间就是ArrayList比LinkedList快,如果在最前面就是LinkedList比ArrayList快
删除
ArrayList比LinkedList快
看完我们的代码解释,很容易理解我们的是正确的
我们在看看别人的解释
A. ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 //正确,这里的所谓动态数组并不是那个“ 有多少元素就申请多少空间 ”的意思,通过查看源码,可以发现,这个动态数组是这样实现的,如果没指定数组大小,则申请默认大小为10的数组,当元素个数增加,数组无法存储时,系统会另个申请一个长度为当前长度1.5倍的数组,然后,把之前的数据拷贝到新建的数组。
- ---------------------------------------------------------------------
B. 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。//正确,ArrayList是数组,所以,直接定位到相应位置取元素,LinkedLIst是链表,所以需要从前往后遍历。
-----------------------------------------------------------------------
C. 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。//正确,ArrayList的新增和删除就是数组的新增和删除,LinkedList与链表一致。
-------------------------------------------------------------------------
D. ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间。//正确,因为ArrayList空间的增长率为1.5倍,所以,最后很可能留下一部分空间是没有用到的,因此,会造成浪费的情况。
答案为A B C D
我是歌谣,有什么不合理之处欢迎之处,一起学习,共同进步。喜欢敲代码,没事刷刷题。
阅读目录(置顶)(长期更新计算机领域知识)
阅读目录(置顶)(长期更新计算机领域知识)
阅读目录(置顶)(长期科技领域知识)
歌谣带你看java面试题