List接口

特点:
List集合类中元素有序,且可重复
我们通常把List及其实现类看做是对原来的数组的升级版,通常叫做"动态数组",不用关心长度够不够的问题,但不意味着它不需要扩容,只是这件事它的底层帮我们做好了

常用实现类: ArrayList,LinkedList和Vector
ArrayList,LinkedList和Vector的异同:
同:
1)这三个类都实现了接口List
2)存储的数据都具有有序,可重复的特点
说明: 涉及到底层存储有两个最基本的比较经典的数据结构:数组和链表
不同点:
ArrayList:作为List接口的主要实现类(也就是说如果没有特殊的需求,new这个就完了),线程不安全,效率高,底层使用Object[] elementData存储数据
LinkedList:每个元素叫一个Node,Node是节点的意思,对于频繁的插入,删除操作使用此类的效率比ArrayList高,因为底层使用双向链表存储数据,每一个节点中有三个部分,其中一个是节点的核心数据,另外的两个分别说明它的上一个和下一个节点是谁,如果是第一个元素,因为没有前面的节点,所以表明前一个的东西就是null。插入和删除数据只要改变指针的指向即可,改变只和他相邻的两个元素有关,因为ArrayList底层用的仍然是数组,只是说把一些操作给封装好了,所以插入,删除仍涉及到大量数据的移动,效率很低。如果只是往里面放数据(往末尾放,往中间放数据是插入),取出数据,查找数据(如果是链表查找需要一个一个找,不能直接取出来,因为链表没有序号)ArrayList效率更高
Vector:作为List接口的古老(因为最开始的版本就有了)实现类,是不怎么使用的,线程安全,效率低,底层使用Object[] elementData存储
注意:
1)String,StringBuffer底层是用char[]
2)使用链表存储和使用数组存储表现出来的特点不同

ArrayList的源码分析:
JDK7和JDK8略有不同
JDK7情况下
ArrayList list=new ArrayList();//调用空参构造器,创建了一个初始容量为10的Object类型的数组,数组名为elementData
list.add(123);//elementData[0]=new Integer(123);
……
list.add(11);//如果此次添加底层elementData数组容量不够,则扩容
默认情况下容量扩容为原来容量的1.5倍(新造了一个数组,是原来长度的1.5倍)将原来的数组中的数据拷贝到新数组中,新数组作为elementData的新值
扩容操作:elementData=Arrays.copyOf(elementData,newCapacity);

结论: 建议开发中使用带参的构造器,避免在中间环节扩容,参数决定了底层创建数组的长度,比如说知道会放不超过50个数据,那就传50即可,尽量不要用空参的构造器
说明: StringBuffer,去new的时候,如果使用空参构造器,底层造了一个长度为16的char[]数组,默认情况下容量扩容为原来的2倍再加上2

JDK8当中:
ArrayList的变化:
不会像JDK7那样在造对象的时候就把底层数组给实例化了
第一次调add方法时才把数组创建好
ArrayList list=new ArrayList();//底层Object[] elemtneData初始化为{},并没有创建长度为10的数组
list.add(123)//第一次调用add时,底层才创建长度为10的数组,并将数据添加到elementData[0]
后续的添加扩容操作与JDK7无异
小结:JDK7中的ArrayList的对象的创建类似于单例模式的饿汉式,而JDK8中的ArrayList的对象的创建类似于单例模式的懒汉式,延迟了数组的创建,节省内存

LinkedList的源码分析
在JDK7和JDK8中没什么区别

LinkedList list=new LinkedList()
内部声明了Node类型的frist和last属性,默认值为null
头指针(指向当前链表的第一个元素)用frist表示,尾指针用last表示
每一个节点中也有指针,指向前面的那个叫prev,指向后面的那个指针叫next,还包括核心数据element
list.add(123);//将123封装到Node中,创建了Node对象
其中Node定义为,体现了双向链表

private static class Node<E>{
	E item;
	Node<E> next;
	Node<E> prev;
	Node(Node<E> prev,E element,Node<E> next){
	this.item=element;
	this.next=next;
	this.prev=prev;
  }
}

只有数组才涉及到扩容

电动汽车数据集:2025年3K+记录 真实电动汽车数据:特斯拉、宝马、日产车型,含2025年电池规格和销售数据 关于数据集 电动汽车数据集 这个合成数据集包含许多品牌和年份的电动汽车和插电式车型的记录,捕捉技术规格、性能、定价、制造来源、销售和安全相关属性。每一行代表由vehicle_ID标识的唯一车辆列表。 关键特性 覆盖范围:全球制造商和车型组合,包括纯电动汽车和插电式混合动力汽车。 范围:电池化学成分、容量、续航里程、充电标准和速度、价格、产地、自主水平、排放、安全等级、销售和保修。 时间跨度:模型跨度多年(包括传统和即将推出的)。 数据质量说明: 某些行可能缺少某些字段(空白)。 几个分类字段包含不同的、特定于供应商的值(例如,Charging_Type、Battery_Type)。 各列中的单位混合在一起;注意kWh、km、hr、USD、g/km和额定值。 列 列类型描述示例 Vehicle_ID整数每个车辆记录的唯一标识符。1 制造商分类汽车品牌或OEM。特斯拉 型号类别特定型号名称/变体。型号Y 与记录关联的年份整数模型。2024 电池_类型分类使用的电池化学/技术。磷酸铁锂 Battery_Capacity_kWh浮充电池标称容量,单位为千瓦时。75.0 Range_km整数表示充满电后的行驶里程(公里)。505 充电类型主要充电接口或功能。CCS、NACS、CHAdeMO、DCFC、V2G、V2H、V2L Charge_Time_hr浮动充电的大致时间(小时),上下文因充电方法而异。7.5 价格_USD浮动参考车辆价格(美元).85000.00 颜色类别主要外观颜色或饰面。午夜黑 制造国_制造类别车辆制造/组装的国家。美国 Autonomous_Level浮点自动化能力级别(例如0-5),可能包括子级别的小
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值