Java中的List

List

扩容规则:

1.ArrayList初始化大小为10,扩容规则:扩容后的大小= 原始大小*1.5。

2.linkList没有初始化大小,它就是一个双向链表,没有扩容,就是一直在前面或者在后面新增就好。

3.HashMap初始化大小为16,扩容因子默认为0.75(可以指定初始化大小和扩容因子的)HashMap 的容量必须是2的N次方,HashMap 会根据我们传入的容量计算一个大于等于该容量的最小的2的N次方,例如传new HashMap<>(9); 容量大小为16。

扩容机制.(当前大小 和 当前容量 的比例超过了 扩容因子,就会扩容,扩容后大小为 一倍。例如:初始大小为 16 ,扩容因子 0.75 ,当容量为12的时候,比例已经是0.75 。触发扩容,扩容后的大小为 32.)

List的接口有三个实现类。

1.ArrayList

ArrayList是一种基于数组的有序列表,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素,非线程安全。
ArrayList初始化大小为10,扩容规则:扩容后的大小= 原始大小*1.5。

创建方法:ArrayList objectName =new ArrayList<>();
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程不安全(一般不考虑到线程的安全因素,用Arraylist效率比较高)

2.LinkedList

LinkedList是一种基于数据结构的双向链表,除了首节点与尾节点每个节点有三个值(上个节点的地址、值、下一个结点的地址)
LinkList没有初始化大小,它就是一个双向链表,没有扩容,就是一直在前面或者在后面新增就好。
它是一个队列,可以当双端队列来使用
它是一个集合,可以根据索引随机访问集合中的元素,还实现了Deque接口
LinedList是一个List集合,它的实现方式和ArrayList是完全不同的,ArrayList的底层是通过一个动态的Object[]数组实现的,而LinkedList的底层是通过链表来实现的,因此它的随机访问速度是比较差的,但是它的删除,插入操作很快。
LinkedList是基于双向循环链表实现的,除了可以当作链表操作外,它还可以当作栈、队列和双端队列来使用。
LinkedList同样是非线程安全的,只在单线程下适合使用。

创建方法:LinkedList list = new LinkedList();
优点: 底层数据结构是链表,增删快,查询慢。
缺点: 线程不安全。

3.Vector

Vector 类实现了一个动态数组。和 ArrayList 很相似,但是两者是不同的:
Vector 是同步访问的。
Vector 包含了许多传统的方法,这些方法不属于集合框架。
有序的,可以存储重复值和null值。底层是数组实现的,线程安全。结构与ArrayList非常相似,同样是一个线性的动态可扩容数组。初始容量是10,没有设置扩容增量的情况下以自身的2倍容量扩容,可以设置容量增量,初始容量和扩容量可以通过构造函数public Vector(int initialCapacity, int capacityIncrement)进行初始化。
Vector 类支持 4 种构造方法。
第一种构造方法创建一个默认的向量,默认大小为 10:
Vector()
第二种构造方法创建指定大小的向量。
Vector(int size)
第三种构造方法创建指定大小的向量,并且增量用 incr 指定。增量表示向量每次增加的元素数目。
Vector(int size,int incr)
第四种构造方法创建一个包含集合 c 元素的向量:
Vector(Collection c)
优点: 底层数据结构是数组,查询快,增删慢。线程安全。
缺点: 效率低。

借鉴多篇博客
原文链接:https://blog.csdn.net/weixin_45706529/article/details/125384857
原文链接:https://www.runoob.com/java/java-vector-class.html
原文链接:https://blog.csdn.net/he_zhen_/article/details/87020557
原文链接:https://blog.csdn.net/weixin_45706529/article/details/125384857

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值