• ArrayList 、Vector 和 LinkedList 有什么区别?


    ArrayList、Vector 、LinkedList 类均在java.util 包中,均为可伸缩数组,即可以动态改变长度的数组。

    ArrayList 和 Vector 都是基于存储元素的 Object[ ] array 来实现的,它们会在内存中开辟一块连续的空间来存储,由于数据存储是连续的,因此,它们支持用序号(下标)来访问元素,同时索引数据的速度比较快。但是在插入元素时需要移动容器中的元素,所以对数据的插入操作执行得比较慢。ArrayList 和 Vector 都有一个初始化的容量的大小,当里面存储的元素超过这个大小时就需要动态地扩充它们的存储空间。为了提高程序的效率,每次扩充容量,不是简单地扩充一个存储单元,而是一次增加多个存储单元。Vector默认扩充为原来的2倍(每次扩充空间的大小是可以设置的),而ArrayList默认扩充为原来的1.5倍(没有提供方法来设置空间扩充的方法)。

    ArrayList 与Vector最大的区别就是 synchronization(同步)的使用,没有一个ArrayList的方法是同步的,而Vector的绝大多方法(例如add/insert、remove、set、equals、hashcode等)都是直接或者间接同步的,所以Vector是线程安全的,ArrayList不是线程安全的。真是由于Vector 提供了线程安全的机制,其性能上也要略逊于ArrayList。

    LinkedList 是采用双向列表来实现的,对数据的索引需要从列表头开始遍历,因此用于随机访问则效率比较低,但是插入元素时不需要对数据进行移动,因此插入效率较高。同时,LinkedList是非线程安全的容器。

    总结: 在实际使用时,如何从这几种容器中选择合适的使用?

    当对数据的主要操作为索引或只在集合的末端增加、删除元素时,使用ArrayList或Vector效率比较高;当对数据的操作主要为指定位置的插入或删除操作时,使用LinkedList效率比较高;当在多线程中使用容器时(即多个线程会同时访问该容器),选用Vector较为安全。

  • 相关阅读:
    聊聊部署在docker容器里面的springboot项目如何启用arthas
    如何低侵入的记录调用日志
    聊聊如何在spring事务中正确进行远程调用
    聊聊因不恰当使用alibaba sentinel而踩到的坑
    SqlServer行转列关键字——Pivot
    [转] 为后人挖坑指南
    动态加载js并调用其中指定名称方法
    Html网页模态居中弹窗
    SqlServer 要了解死锁必须学会制造死锁
    SqlServer中的(分区)表文件组
  • 原文地址:https://www.cnblogs.com/liyao0312/p/11290249.html
Copyright © 2020-2023  润新知