从知识图谱讲到源码实例,基础的知识深入学习就不只是基础

本文深入探讨了ArrayList和LinkedList在Java集合中的实现和使用,包括ArrayList的底层实现、扩容机制、序列化,以及与Vector的比较。同时,介绍了LinkedList的双向链表结构、插入删除效率及查询性能。通过对这两种数据结构的理解,帮助程序员在实际开发中做出更合适的选择。
摘要由CSDN通过智能技术生成

作为一个程序员,通常,我们的程序需要根据程序运行时才知道创建多少个对象。但若非程序运行,程序开发阶段,我们根本不知道到底需要多少个数量的对象,甚至不知道它的准确类型。为了满足这些常规的编程需要,我们要求能在任何时候,任何地点创建任意数量的对象,而这些对象用什么来容纳呢?我们首先想到了数组,但是数组只能放同一类型的数据,而且其长度是固定的,那怎么办呢?集合便应运而生了!

而对于集合的相关内容,我通过思维导图整理了一下,分成两个部分,Map和Collection两个部分,来看一下

Map

Collection

因为篇幅原因,只展示Collection的List,这也是在日常开发中应用最多的,或者说在面试过程中被问到最多的一个知识点,因为它可以扩充出来很多其他的知识点

一、ArrayList的底层实现

  • ArrayList实现与List、RandomAccess接口,是顺序接口,即元素存放的数据与放进去的顺序相同,允许放入null元素,也支持随机访问
  • 底层通过数组实现。除该类未实现同步外,其余跟Vector大致相同
  • ArrayList相当于动态数据,其中最重要的两个属性分别是:elementData数组以及siz

 二、ArrayList可以实现同步吗

为了追求效率,ArrayList没有实现同步(synchronizd),如果需要逗哥线程并发访问,用户可以手动同步,也可以使用Vector代替。如可以先采用Collections.synchronizedList()方法对其进行包装

三、ArrayList的add()方法

在调用add()方法的时候首先进行扩容校验,将插入的值放在尾部,并将size+1.

 public boolean add(E e) {
        ensureCapacityInternal(size + 1);  // Increments modCount!!
        elementData[size++] = e;
        return true;
    }

四、ArrayList的add(index,e)方法

如果调用add(index,e)在指定位置添加的话也是首先扩容校验,接着对数据进行复制,目的是把index位置空出来放本次插入的数据,并将后面的数据向后移动一个位置。

public void add(int index, E element) {
        rangeCheckForAdd(index);

        ensureCapacityInternal(size + 1);  // Increments modCount!!      //复制,向后移动
        System.arraycopy(elementData, index, elementData, index + 1,
       
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值