Collection子接口——List接口

本文探讨了Java中数组的局限性,重点介绍了ArrayList、LinkedList和Vector的使用,比较了它们在jdk7和8中的创建机制,以及在插入、删除和线程安全性上的差异。ArrayList适合查询,LinkedList适合频繁修改,Vector线程安全但效率较低。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java中数组存储数据具有局限性,我们通常用List替代数组
1.List集合类中元素有序,且可重复(有序:按添加的顺序)
2.ArrayList、 LinkedList、Vector三种实现类

ArrayList.、LinkedList.、Vector的使用:
ArrayList的源码分析:
①jdk.7情况下:

ArrayList list=new ArrayList();//底层创建了长度为10的object[]数组

list.add (123) //elementDate(0]= new Integer (123);

...

list.add (11);// 如果此次添加导致数组容量不够,则扩容。扩容为原来的1.5倍,并将数据复制到新的数组中

//开发中建议使用带参构造器(可指定长度)

Arruy List list = new ArrayList (int capacity);

②jdk8情况下:

Array List list =new ArrayList()://底层object [] JelementDate.初始化为{};并没有创建数组。

list.add(123);//第一次调用add()时,底层才创建了长度为10的数组,并将123添加进数组中。

//后续的添加和扩容与jdk7相同

小结:idk7中的创建类似于单例的饿汉式,而jdk8中的创建类似于懒汉式。延迟了数组的创建,节省内存。

LinkedList的源码分析:(双向链表)first list  last

Linked List list=new Linked List();//内部声明了Node类型的firse和last属性,默认值为null.
list.add(123);//将123封装到Node中,创建了Node对象

Vector的源码分析
jdk7和8都创建了长度为10的数组,在扩容方面,默认扩容为原来的数组的2倍。

ArrayList::list的主要实现类,线程不安全,查询效率高。

LinkedList:对于频繁的插入、删除比ArrayList效率高。

Vector: list的古老实现类、线程安全,效率低。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值