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

相关文章
|
2月前
|
Java
java8中List对象转另一个List对象
java8中List对象转另一个List对象
41 0
|
2天前
|
存储 安全 算法
Java一分钟之-Java集合框架入门:List接口与ArrayList
【5月更文挑战第10天】本文介绍了Java集合框架中的`List`接口和`ArrayList`实现类。`List`是有序集合,支持元素重复并能按索引访问。核心方法包括添加、删除、获取和设置元素。`ArrayList`基于动态数组,提供高效随机访问和自动扩容,但非线程安全。文章讨论了三个常见问题:索引越界、遍历时修改集合和并发修改,并给出避免策略。通过示例代码展示了基本操作和安全遍历删除。理解并正确使用`List`和`ArrayList`能提升程序效率和稳定性。
7 0
|
3天前
|
存储 安全 Java
【JAVA基础篇教学】第八篇:Java中List详解说明
【JAVA基础篇教学】第八篇:Java中List详解说明
|
3天前
|
存储 安全 Java
Java容器类List、ArrayList、Vector及map、HashTable、HashMap
Java容器类List、ArrayList、Vector及map、HashTable、HashMap
|
13天前
|
Java API
【亮剑】三种有效的方法来删除List中的重复元素Java的List
【4月更文挑战第30天】本文介绍了三种Java中删除List重复元素的方法:1) 使用HashSet,借助其不允许重复值的特性;2) 利用Java 8 Stream API的distinct()方法;3) 对自定义对象重写equals()和hashCode()。每种方法都附带了代码示例,帮助理解和应用。
|
1月前
|
Java
Java中拷贝list数组如何实现
Java中拷贝list数组如何实现
11 0
|
1月前
|
存储 Java API
java集合Collection(List)和泛型
java集合Collection(List)和泛型
|
1月前
|
Java
list集合 使用java8同一列表获取前一条的数据放到当前对象中
list集合 使用java8同一列表获取前一条的数据放到当前对象中
|
1月前
|
存储 安全 Java
Java集合详解(List、Map、Set)
Java集合详解(List、Map、Set)
34 4
|
1月前
|
Java
Java使用List去重的四中方式
Java使用List去重的四中方式
21 6