ArrayList、LinkedList、Vector原理和特点

本文深入探讨ArrayList、LinkedList和Vector三种Java集合类的特性、实现原理及应用场景。对比它们在查询、增删操作上的性能差异,解析ArrayList与Vector的线程安全区别,以及LinkedList在队列和栈数据结构中的灵活运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ArrayList

集合的体系:

------------| Collection 单列集合的根接口

-----------------| List 实现了List接口的结合类,具备的特点:有序,可重复

---------------------- | ArrayList ArrayList底层是维护了一个Object数组来实现的,特点:查询速度快、增删慢。

---------------------- | LinkedList LinkedList底层是使用了链表数据结构实现的。特点:查询速度慢,增删快。

---------------------- | Vector Vector类可以实现可增长的对象数组,底层也是维护了一个Object数组。

-----------------| Set 实现了Set接口的集合类,具备的特点:无序,不可重复

ArrayList的特有方法:

​ ensureCapacity(int minCapacity)

​ trimToSize()

笔试题目:使用ArrayList无参的构造函数创建一个对象时,默认的容量是多少?如果长度不够时又自增长多少?

​ ArrayList底层是维护了一个Object的数组实现的,使用无参构造函数时,Object数组默认的容量时10,当长度不够时,自动增长0.5倍

ArrayList的实现原理和它的特点:

ArrayList底层是维护了一个Object数组来实现的,特点:查询速度快、增删慢。

什么时候使用ArrayList:如果目前的数据是查询比较多,增删比较少的时候,那么就使用ArrayList存储这批数据。比如:高效的图书馆

LinkedList

List接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括null)。除了实现List接口外,LinkedList类还为在列表的开头及结尾get、remove和insert元素提供了统一的命名方法。这些操作允许将链表列表用作堆栈、队列和双端队列。

LinkedList的实现原理和它的特点:

LinkedList底层是使用了链表数据****结构实现的。特点:查询速度慢,增删快。

LinkedList常用的特有方法:

1、方法介绍

​ addFirst(E e)

​ addLast(E e)

​ getFirst()

​ getLast()

​ removeFirst()

​ removeLast()

2、数据结构

​ 栈(1.6):主要是用于实现堆栈数据结构的存储方式的

​ 先进后出,后进先出

​ push() 将元素推入此列表所表示的堆栈,换句话说,将该元素插入此列表的开头。

​ pop() 删除并返回集合中的首元素

​ 队列(双端队列1.5):主要是为了可以使用LinkedList模拟队列数据结构的存储方式。

​ 先进先出,后进后出

​ offer() 将指定元素添加到此列表的末尾(最后一个元素)

​ poll() 删除集合的首元素。获取并移除此列表的头(第一个元素)

3、返回逆序的迭代器对象

​ descendingIterator() 返回逆序的迭代器对象

public class Demo{
    public static void main(String[] args){
        LinkedList list = new LinkedList();
        list.add("三");
        list.add("四");
        list.add("五");
        
        list.addFirst("二"); // 把元素添加到集合的首位置上
        list.addLast("六"); // 把元素添加到集合的末尾处    
        
        Iterator it = list.descendingIterator();
        while(it.hasNext()) {
            System.out.println(it.next());
        }
    }
    
}

Vector

Vector类可以实现可增长的对象数组,与数组一样,它包含可以使用证书索引进行访问的组件。但是,vector的大小可以根据需要增大或缩小。

Vector底层也是维护了一个Object的数组实现的,实现与ArrayList是一样的,但是Vector是线程安全的,操作效率低。

ArrayList与Vector的区别:

相同点:ArrayList与Vector底层都是使用了Object数组实现的。

不同点:1、ArrayList是线程不同步的,操作效率高。Vector是线程同步的,操作效率低。

​ 2、ArrayList是JDK1.2出现,Vector是JDK1.0出现的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值