java集合之ArrayList源码解析(java8),大厂Java研发岗面试复盘

本文深入解析了Java ArrayList的源码,包括数据结构、核心方法如add、remove和set,以及ArrayList与Array的区别。同时,文章还讨论了ArrayList在大厂Java研发面试中的重要性。
摘要由CSDN通过智能技术生成

System.out.println(list.indexOf(“a”)); //集合中有该元素就返回第一次出现的index,没有就返回-1

list.add(“b”);

System.out.println(list.indexOf(“b”)); //返回第一个对应的索引

System.out.println(list.lastIndexOf(“b”)); //返回最后一个对应的索引

}

}

//output:

在这里插入图片描述

二,ArrayList中的数据结构


学习源码时,都会涉及到数据结构,而数据结构往往是程序的精髓所在。ArrayList的数据结构是数组,但是它跟数组不同的地方是ArrayList有一种扩容机制,所以能过自动扩容。妈妈再也不用担心我的容量不够了。

ArrayList的查询速率高,增删效率低,线程不安全。Vector是线程安全的,但是性能不及ArrayList,它们俩的底层实现都是数组。增删一般用HashMap,HashMap是最常用到的集合框架,它的底层实现是链表。

三,ArrayList的核心方法


1,继承结构

public class ArrayList extends AbstractList

implements List, RandomAccess, Cloneable, java.io.Serializable

{

我们可以很清晰的看出,ArrayList先继承了AbstractList,然后分别实现List, RandomAccess, Cloneable, java.io.Serializable三个接口。

List接口

RandomAccess接口 :用来快速存取,提高性能的。

Cloneable接口:实现了该接口,就可以使用Object.Clone()方法了。

Serializable接口:实现该序列化接口,表明该类可以被序列化,什么是序列化?简单的说,就是能够从类变成字节流传输,然后还能从字节流变成原来的类。

这里为什么没有让ArrayList直接实现List接口呢?反而让ArrayList继承AbstractList,然后AbstractList再实现List接口。其实这是java大牛设计jdk时就考虑到的问题,设计的思想是简洁可读性。

接口中全都是抽象的方法,而抽象类中可以有抽象方法,还可以有具体的实现方法,正是利用了这一点,让AbstractList是实现接口中一些通用的方法,而具体的类还可以添加自己独特的方法。

2,类中的属性

public class ArrayList extends AbstractList

implements List, Rando

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值