首页 > 编程语言 > 详细

java之集合框架笔记

时间:2019-08-17 19:31:22      阅读:89      评论:0      收藏:0      [点我收藏+]

一、集合框架的整体结构,用一张图片来说明

.................................................................................技术分享图片

二、详解List接口中的三个实现类,以及面试题分析

  1.ArrayList:对数组的一种封装,可以理解为长度可变的数组,在内存中分配连续的空间,它里面可以添加任何类型的数据,并且添加的数据都会转换为Object类型。

    1.1 底层实现:我们看jdk源码不难发现,ArrayList底层实现其实就是Object类型的数组,所以它具有数组的一些特征

    1.2 存取数据的效率: 由于他的底层是数组实现,所以查找效率较高,因为有数组有下标,可以直接通过下标来进行遍历查找,但是我们想一下,若是进行增删操作的时候,当删除中间的一个数据的时候,我们为了保证数组下标的连续性,要将该数组的删除位后面的元素进行向前移动,jdk源码里面是通过copy来实现这种操作,增加的时候也是一样,需要将增加位置处的后面的元素向后移动,这就大大较低了效率,所以他在增删效率上面是有欠缺的。

    1.3 线程不安全:他没有要求线程安全,即没有synchronized锁来修饰他的方法,所以相对线程安全的类来说,性能会好一点

    1.4 推荐使用:若不是要求线程,一般推荐使用ArrayList

技术分享图片 

  2. LinkedList :支持所有List接口可选的列表的操作,允许元素值是任何类型,包括Null.

    2.1 底层实现:LinkedList底层实现是双向链表结构,他具有一些不同于数组的特征

    2.2 存取数据的效率:双向链表结构,决定了他的性能,增删效率较高,查找慢,我们可以试想一下,当增加一个节点的时候,只需要将前后节点的链接断开,将新增节点的前后链接上去,不需要像数组一样还要进行元素的移位操作,同理,删除操作也是一样,这就大大提高了他的效率,但是查找的时候,需要从首尾节点逐一去查找他所需要的元素,这就大大较低了他的查找的效率。

    2.3 线程不安全:没有synchronized锁来修饰他的方法

    2.4 不推荐使用:一般使用ArrayList就足够

技术分享图片

 

  3.Vector :他的底层实现和ArrayList一样,也是数组实现,在这里我就不在赘述他的底层

     3.1 线程安全:他的方法使用synchronized 修饰,所以线程安全,但是这就决定了他的效率性能不太理想,所以一般不推荐使用

     3.2 不推荐使用:若不是非要线程安全,一不推荐使用。

三、面试题:ArrayList、linkedList、Vector的区别:

  相同点:1.都是List接口的实现类

      2.都有序,有索引,可重复。(此处的索引是可以通过索引查找该元素)

  不同点:1.底层实现:ArrayList、Vector底层实现是数组,LinkedList底层实现是双向链表

      2.线程:Vector线程安全、linkedList,ArrayList线程不安全

      3.效率:ArrayList查找较快,增删较慢,LinkedList查找较慢,增删较快

  

java之集合框架笔记

原文:https://www.cnblogs.com/gaobingbing/p/11369697.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!