java中的List接口(ArrayList、Vector、LinkedList)
一、List接口有三个常用的集合(ArrayList、Vector、LinkedList) ArrayList注意事项
- ArrayList底层是用数组来实现数据存储的 底层是 transient Object[ ] elementdata是一个Object类型的数组
- 这个transient 意思是:短暂的,瞬间的 用这个关键字修饰表示 该属性不会序列化,解释:有些属性不需要被序列化,比如一些敏感的信息,银行卡密码等,一些隐私,可以用transient
- ArrayList基本等同于Vector,ArrayList是线程不安全的,但效率高,在多线程的情况下,不建议使用ArrayList
- ArrayList底层是一个数组
- ArrayList有两个构造器:1、一个是无参的。2、一个是有参的构造器传入一个int类型的值,指定ArrayList数组的大小
- 当创建ArrayList对象时,调用无参构造器,则初始化数组大小为10也就是把 elementdata 初始化 = 10。 当添加到第11个的时候,会对数组进行扩容, 会按照 elementdata 的1.5倍扩容。 如果15个空间用完,则会以15的1.5倍扩容。从此类推,如果没给值,默认的就是null。
- 当创建ArrayList对象时,调用有参构造器,会传入一个int值,指定数组大小。假设传入的是8,则 elementdata = https://www.it610.com/article/8 如果超过8个,就扩容,则是 8的1.5倍。类推,没有数据默认为null。
- Vector底层也是一个对象数组
- Vector底层和Arraylist几乎相同,就是一个线程安全,一个线程不安全
- Vector是线程同步的,即线程安全,Vector操作方法有Synchoronized
-
public synchronized boolean add(E e) { modCount++; ensureCapacityHelper(elementCount + 1); elementData[elementCount++] = e; return true; }
文章图片
LinkedList介绍
- LinkedList底层维护了一个双向链表
- 可以添加任何元素,元素可以重复,包括null
- 线程不安全,没有实现同步
- LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。
- LinkedList中维护了两个属性:一个是first和last分别指向首届点和尾节点
- 每一个节点里面有一个Node对象,里面有维护了prev,next,item三个属性,其中通过prev指向指向前一个节点,通过next指向后一个节点。最终实现双向链表
- 所以LInkedList的元素添加和删除,不是通过数组完成的,相对来说效率比较高
文章图片
ArrayList和LinkedList区别
文章图片
【java中的List接口(ArrayList、Vector、LinkedList)】
推荐阅读
- mybatis介绍--基于个人学习JavaWeb的使用
- 简单聊一聊Javascript中的模块化
- Java8中CompletableFuture的用法全解
- IDEA神器一键查看Java字节码及其他类信息插件
- Java设计模式七大原则之依赖倒置原则详解
- javascript|JavaScript脚本语言介绍并实现第一个Hello World程序
- java语言的编译器可以用python_到底学Python还是Java()
- 什么是好的错误消息? 讨论一下Java系统中的错误码设计
- 向工程腐化开炮|向工程腐化开炮 | Java代码治理
- 《mongodb经典入门》|四.MongoDB入门-Java操作MongoDB