HarmonyOS实战开发-ArkTS语言基础类库(容器类库)解析

前言

容器类库是指一组用于存储和管理数据的数据结构和算法。它们提供了各种不同类型的容器,如数组、链表、树、图等,以及相关的操作和功能,如查找、插入、删除、排序等。

容器类库还可以包含其他数据结构和算法,如堆、树、图等,以及相关的操作和功能,如排序、查找、遍历等。它们可以用于解决各种不同的问题和场景,提供了方便、高效和可靠的数据管理和操作功能。

一、容器类库

1.线性容器

2.1 ArrayList

ArrayList可以存储任意类型的对象,包括基本数据类型的包装类。

与普通数组相比,ArrayList的优势在于可以动态增加和缩减元素的数量,而不需要手动调整数组的大小。当需要添加或删除元素时,ArrayList会根据需要自动扩容或缩减。ArrayList依据泛型定义,要求存储位置是一片连续的内存空间,初始容量大小为10,并支持动态扩容,每次扩容大小为原始容量的1.5倍。

ArrayList提供了一系列方法用于操作集合中的元素,包括添加、删除、修改和查找等操作。可以使用get方法获取指定位置的元素,使用add方法在指定位置添加元素,使用remove方法删除指定位置的元素等等。

需要注意的是,ArrayList是非线程安全的,如果多个线程同时访问同一个ArrayList对象,可能会引发并发访问异常。如果需要在多线程环境下使用ArrayList,可以使用Collections类提供的synchronizedList方法将ArrayList转换为线程安全的List。

2.2 Vector

Vector和ArrayList在实现上确实相似,都是通过数组来存储元素,但有一些细微的差别。

1.线程安全性:Vector是线程安全的,而ArrayList不是。因为Vector的方法都是同步的,可以在多线程环境下安全使用,但这也导致了Vector在性能上比ArrayList稍慢。

2.动态扩容:Vector的扩容机制是每次扩容容量为原始容量的2倍,而ArrayList是每次扩容容量为原始容量的1.5倍。

3.初始容量:Vector的初始容量大小为10,而ArrayList的初始容量为0。

4.接口:Vector相比ArrayList提供了更多的操作数组的接口,如insertElementAt、removeElementAt等,这些接口可以更方便地在数组中插入、删除元素。

Vector在某些特定的场景下可能更适合使用,比如在多线程环境下或者需要频繁进行插入、删除元素的情况下。而ArrayList在单线程环境下性能更好,适合大部分场景。

API version 9开始,该接口不再维护,推荐使用ArrayList。

2.3 List

List可以用来构造单向链表对象,每个节点包含一个数据元素和一个指向下一个节点的引用。链表中的节点在内存中可以是不连续的,因此可以灵活地进行插入和删除操作。

当需要频繁进行插入和删除操作时,使用List可以更高效地操作链表。因为插入和删除操作只需要改变节点的引用,而不需要移动其他节点。相比之下,如果使用数组或者其他连续内存的数据结构,插入和删除操作可能需要移动大量的元素,效率较低。

2.4 LinkedList

LinkedList是一种双向链表,每个节点除了储存数据外,还有两个指针分别指向前一个节点和后一个节点。这样的结构使得LinkedList可以快速地在头尾进行插入和删除操作,因为只需要改变相邻节点的指针即可,不需要像数组一样进行数据的搬移。

另外,LinkedList的内存存储位置可以是不连续的,这是因为每个节点只需要储存指向前后节点的指针,并不需要连续存储数据,所以在内存中的存储位置可以是不连续的。

相比之下,List接口代表一种有序的数据集合,可以包含重复的元素,但是没有提供快速的插入和删除操作。List的具体实现类,如ArrayList,底层实现是数组,而不是链表。虽然ArrayList在查询操作上效率更高,因为可以根据索引快速访问元素,但是插入和删除操作需要搬移后续元素,效率较低。

如果需要频繁地进行插入和删除操作,尤其是在列表的头尾进行操作,推荐使用LinkedList。而如果需要频繁地进行查询操作,或者需要通过索引直接访问元素,推荐使用ArrayList。

2.5 Deque

Deque是一种双端队列,它继承自Queue接口,提供了一些额外的方法来支持在队头和队尾进行添加和删除元素的操作。

Deque接口的主要方法包括:

●addFirst(E e):在队头插入指定元素。<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值