非线性容器实现能疾速查找的数据结构,其底层通过 hash 或者红黑树实现,包含 HashMap、HashSet、TreeMap、TreeSet、LightWeightMap、LightWeightSet、PlainArray 七种。非线性容器中的 key 及 value 的类型均满足 ECMA 规范。

HashMap

HashMap可用来存储具备关联关系的 key-value 键值对汇合,存储元素中 key 是惟一的,每个 key 会对应一个 value 值。

HashMap 根据泛型定义,汇合中通过 key 的 hash 值确定其存储地位,从而疾速找到键值对。HashMap 的初始容量大小为 16,并反对动静扩容,每次扩容大小为原始容量的 2 倍。HashMap 底层基于 HashTable 实现,抵触策略采纳链地址法。

HashMap 和TreeMap相比,HashMap 根据键的 hashCode 存取数据,访问速度较快。而 TreeMap 是有序存取,效率较低。

HashSet基于 HashMap 实现。HashMap 的输出参数由 key、value 两个值组成。在 HashSet 中,只对 value 对象进行解决。需

要疾速存取、删除以及插入键值对数据时,举荐应用 HashMap。

HashMap 进行增、删、改、查操作的罕用 API 如下:

HashSet

HashSet可用来存储一系列值的汇合,存储元素中 value 是惟一的。HashSet 根据泛型定义,汇合中通过 value 的 hash 值确定其存储地位,从而疾速找到该值。HashSet 初始容量大小为 16,反对动静扩容,每次扩容大小为原始容量的 2 倍。value 的类型满足 ECMA 规范中要求的类型。HashSet 底层数据结构基于 HashTable 实现,抵触策略采纳链地址法。

HashSet 基于HashMap实现。在 HashSet 中,只对 value 对象进行解决。

HashSet 和TreeSet相比,HashSet 中的数据无序寄存,即寄存元素的程序和取出的程序不统一,而 TreeSet 是有序寄存。它们汇合中的元素都不容许反复,但 HashSet 容许放入 null 值,TreeSet 不容许。

能够利用 HashSet 不反复的个性,当须要不反复的汇合或须要去重某个汇合的时候应用。

HashSet 进行增、删、改、查操作的罕用 API 如下:

TreeMap

TreeMap可用来存储具备关联关系的 key-value 键值对汇合,存储元素中 key 是惟一的,每个 key 会对应一个 value 值。

TreeMap 根据泛型定义,汇合中的 key 值是有序的,TreeMap 的底层是一棵二叉树,能够通过树的二叉查找疾速的找到键值对。key 的类型满足 ECMA 规范中要求的类型。TreeMap 中的键值是有序存储的。TreeMap 底层基于红黑树实现,能够进行疾速的插入和删除。

TreeMap 和HashMap相比,HashMap 根据键的 hashCode 存取数据,访问速度较快。而 TreeMap 是有序存取,效率较低。

个别须要存储有序键值对的场景,

能够应用 TreeMap。TreeMap 进行增、删、改、查操作的罕用 API 如下:

TreeSet

TreeSet可用来存储一系列值的汇合,存储元素中value是惟一的。

TreeSet根据泛型定义,汇合中的value值是有序的,TreeSet的底层是一棵二叉树,能够通过树的二叉查找疾速的找到该value值,value的类型满足ECMA规范中要求的类型。TreeSet中的值是有序存储的。

TreeSet底层基于红黑树实现,能够进行疾速的插入和删除。

TreeSet基于TreeMap实现,在TreeSet中,只对value对象进行解决。TreeSet可用于存储一系列值的汇合,元素中value惟一且有序。

TreeSet和HashSet相比,HashSet中的数据无序寄存,而TreeSet是有序寄存。它们汇合中的元素都不容许反复,但HashSet容许放入null值,TreeSet不容许。

个别须要存储有序汇合的场景,能够应用TreeSet。

TreeSet进行增、删、改、查操作的罕用API如下:

LightWeightMap

LightWeightMap可用来存储具备关联关系的 key-value 键值对汇合,存储元素中 key 是惟一的,每个 key 会对应一个 value 值。LightWeightMap 根据泛型定义,采纳更加轻量级的构造,底层标识惟一 key 通过 hash 实现,其抵触策略为线性探测法。汇合中的 key 值的查找依赖于 hash 值以及二分查找算法,通过一个数组存储 hash 值,而后映射到其余数组中的 key 值以及 value 值,key 的类型满足 ECMA 规范中要求的类型。

初始默认容量大小为 8,每次扩容大小为原始容量的 2 倍。
LightWeightMap 和HashMap都是用来存储键值对的汇合,LightWeightMap 占用内存更小。

当须要存取 key-value 键值对时,举荐应用占用内存更小的 LightWeightMap。

LightWeightMap 进行增、删、改、查操作的罕用 API 如下:

LightWeightSet

LightWeightSet可用来存储一系列值的汇合,存储元素中 value 是惟一的。

LightWeightSet 根据泛型定义,采纳更加轻量级的构造,初始默认容量大小为 8,每次扩容大小为原始容量的 2 倍。汇合中的 value 值的查找依赖于 hash 以及二分查找算法,通过一个数组存储 hash 值,而后映射到其余数组中的 value 值,value 的类型满足 ECMA 规范中要求的类型。

LightWeightSet 底层标识惟一 value 基于 hash 实现,其抵触策略为线性探测法,查找策略基于二分查找法。

LightWeightSet 和HashSet都是用来存储键值的汇合,LightWeightSet 的占用内存更小。

当须要存取某个汇合或是对某个汇合去重时,举荐应用占用内存更小的 LightWeightSet。

LightWeightSet 进行增、删、改、查操作的罕用 API 如下:

PlainArray

PlainArray可用来存储具备关联关系的键值对汇合,存储元素中 key 是惟一的,并且对于 PlainArray 来说,其 key 的类型为 number 类型。每个 key 会对应一个 value 值,类型根据泛型的定义,PlainArray 采纳更加轻量级的构造,汇合中的 key 值的查找依赖于二分查找算法,而后映射到其余数组中的 value 值。

初始默认容量大小为 16,每次扩容大小为原始容量的 2 倍。

PlainArray 和LightWeightMap都是用来存储键值对,且均采纳轻量级构造,但 PlainArray 的 key 值类型只能为 number 类型。

当须要存储 key 值为 number 类型的键值对时,能够应用 PlainArray。

PlainArray 进行增、删、改、查操作的罕用 API 如下:

非线性容器的应用

此处列举罕用的非线性容器 HashMap、TreeMap、LightWeightMap、PlainArray 的应用示例,包含导入模块、减少元素、拜访元素及批改等操作,示例代码如下所示:

// HashMapimport HashMap from '@ohos.util.HashMap'; // 导入HashMap模块let hashMap = new HashMap();hashMap.set('a', 123);hashMap.set(4, 123); // 减少元素console.info(`result: ${hashMap.hasKey(4)}`); // 判断是否含有某元素console.info(`result: ${hashMap.get('a')}`); // 拜访元素// TreeMapimport TreeMap from '@ohos.util.TreeMap'; // 导入TreeMap模块let treeMap = new TreeMap();treeMap.set('a', 123);treeMap.set('6', 356); // 减少元素console.info(`result: ${treeMap.get('a')}`); // 拜访元素console.info(`result: ${treeMap.getFirstKey()}`); // 拜访首元素console.info(`result: ${treeMap.getLastKey()}`); // 拜访尾元素// LightWeightMapimport LightWeightMap from '@ohos.util.LightWeightMap'; // 导入LightWeightMap模块let lightWeightMap = new LightWeightMap();lightWeightMap.set('x', 123);lightWeightMap.set('8', 356); // 减少元素console.info(`result: ${lightWeightMap.get('a')}`); // 拜访元素console.info(`result: ${lightWeightMap.get('x')}`); // 拜访元素console.info(`result: ${lightWeightMap.getIndexOfKey('8')}`); // 拜访元素// PlainArrayimport PlainArray from '@ohos.util.PlainArray' // 导入PlainArray模块let plainArray = new PlainArray();plainArray.add(1, 'sdd');plainArray.add(2, 'sff'); // 减少元素console.info(`result: ${plainArray.get(1)}`); // 拜访元素console.info(`result: ${plainArray.getKeyAt(1)}`); // 拜访元素