Java中的List

简介: 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

相关文章
|
5月前
|
存储 安全 Java
【Java集合类面试二十五】、有哪些线程安全的List?
线程安全的List包括Vector、Collections.SynchronizedList和CopyOnWriteArrayList,其中CopyOnWriteArrayList通过复制底层数组实现写操作,提供了最优的线程安全性能。
|
5月前
|
Java
【Java集合类面试二十三】、List和Set有什么区别?
List和Set的主要区别在于List是一个有序且允许元素重复的集合,而Set是一个无序且元素不重复的集合。
|
5月前
|
存储 Java
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
|
3月前
|
安全 Java 程序员
深入Java集合框架:解密List的Fail-Fast与Fail-Safe机制
本文介绍了 Java 中 List 的遍历和删除操作,重点讨论了快速失败(fail-fast)和安全失败(fail-safe)机制。通过普通 for 循环、迭代器和 foreach 循环的对比,详细解释了各种方法的优缺点及适用场景,特别是在多线程环境下的表现。最后推荐了适合高并发场景的 fail-safe 容器,如 CopyOnWriteArrayList 和 ConcurrentHashMap。
72 5
|
3月前
|
Java 程序员 编译器
Java|如何正确地在遍历 List 时删除元素
从源码分析如何正确地在遍历 List 时删除元素。为什么有的写法会导致异常,而另一些不会。
63 3
|
3月前
|
Java 程序员
Java|List.subList 踩坑小记
不应该仅凭印象和猜测,就开始使用一个方法,至少花一分钟认真读完它的官方注释文档。
31 1
|
5月前
|
Java 数据库
成功解决:java.sql.SQLSyntaxErrorException: Unknown column ‘origin_name‘ in ‘field list‘
这篇文章讲述了作者在使用SpringBoot和Mybatis-plus时遇到的一个数据库字段映射问题,即SQLSyntaxErrorException错误,原因是实体类字段和数据库字段不匹配。文章提供了两种解决方法:一是关闭自动驼峰命名转换配置,二是修改数据库字段以匹配实体类字段,最终成功解决了问题。
成功解决:java.sql.SQLSyntaxErrorException: Unknown column ‘origin_name‘ in ‘field list‘
|
5月前
|
存储 安全 Java
java集合框架复习----(2)List
这篇文章是关于Java集合框架中List集合的详细复习,包括List的特点、常用方法、迭代器的使用,以及ArrayList、Vector和LinkedList三种实现类的比较和泛型在Java中的使用示例。
java集合框架复习----(2)List
|
5月前
|
存储 安全 Java
java集合框架复习----(4)Map、List、set
这篇文章是Java集合框架的复习总结,重点介绍了Map集合的特点和HashMap的使用,以及Collections工具类的使用示例,同时回顾了List、Set和Map集合的概念和特点,以及Collection工具类的作用。
java集合框架复习----(4)Map、List、set
|
5月前
|
Java
用JAVA架建List集合为树形结构的代码方法
这段代码定义了一个表示树形结构的 `Node` 类和一个用于构建树形结构的 `TreeController`。`Node` 类包含基本属性如 `id`、`pid`、`name` 和 `type`,以及子节点列表 `children`。`TreeController` 包含初始化节点列表并将其转换为树形结构的方法。通过过滤和分组操作实现树形结构的构建。详情可见:[代码示例链接1](http://www.zidongmutanji.com/zsjx/43551.html),[代码效果参考链接2](https://www.257342.com/sitemap/post.html)。
50 5