1# @ohos.util.Queue (线性容器Queue) 2<!--Kit: ArkTS--> 3<!--Subsystem: CommonLibrary--> 4<!--Owner: @xliu-huanwei; @shilei123; @huanghello--> 5<!--Designer: @yuanyao14--> 6<!--Tester: @kirl75; @zsw_zhushiwei--> 7<!--Adviser: @ge-yafang--> 8 9Queue的特点是先进先出,在尾部增加元素,在头部删除元素。根据循环队列的数据结构实现。 10 11Queue和[Deque](js-apis-deque.md)相比,Queue只能在一端删除一端增加,Deque可以两端增删。 12 13**推荐使用场景:** 一般符合先进先出的场景可以使用Queue。 14 15文档中使用了泛型,涉及以下泛型标记符:<br> 16- T:Type,类 17 18> **说明:** 19> 20> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 21> 22> 容器类使用静态语言实现,限制了存储位置和属性,不支持自定义属性和方法。 23 24 25## 导入模块 26 27```ts 28import { Queue } from '@kit.ArkTS'; 29``` 30 31 32## Queue 33 34### 属性 35 36**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 37 38**系统能力:** SystemCapability.Utils.Lang 39 40| 名称 | 类型 | 只读 | 可选 | 说明 | 41| -------- | -------- | -------- | -------- | -------- | 42| length | number | 是 | 否 | Queue的元素个数。 | 43 44 45### constructor 46 47constructor() 48 49Queue的构造函数。 50 51**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 52 53**系统能力:** SystemCapability.Utils.Lang 54 55**错误码:** 56 57以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。 58 59| 错误码ID | 错误信息 | 60| -------- | -------- | 61| 10200012 | The Queue's constructor cannot be directly invoked. | 62 63**示例:** 64 65```ts 66let queue = new Queue<number | string | Object>(); 67``` 68 69 70### add 71 72add(element: T): boolean 73 74在队列尾部插入元素。 75 76**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 77 78**系统能力:** SystemCapability.Utils.Lang 79 80**参数:** 81 82| 参数名 | 类型 | 必填 | 说明 | 83| -------- | -------- | -------- | -------- | 84| element | T | 是 | 要插入的元素。 | 85 86**返回值:** 87 88| 类型 | 说明 | 89| -------- | -------- | 90| boolean | 插入成功返回true,否则返回false。 | 91 92**错误码:** 93 94以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。 95 96| 错误码ID | 错误信息 | 97| -------- | -------- | 98| 10200011 | The add method cannot be bound. | 99 100**示例:** 101 102```ts 103class C1 { 104 name: string = "" 105 age: string = "" 106} 107let queue = new Queue<number | string | C1 | number[]>(); 108let result = queue.add("a"); 109let result1 = queue.add(1); 110let b = [1, 2, 3]; 111let result2 = queue.add(b); 112let c : C1 = {name : "Dylan", age : "13"}; 113let result3 = queue.add(c); 114console.info("result:", queue.length); // result: 4 115``` 116 117### pop 118 119pop(): T 120 121删除头元素并返回该删除元素。 122 123**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 124 125**系统能力:** SystemCapability.Utils.Lang 126 127**返回值:** 128 129| 类型 | 说明 | 130| -------- | -------- | 131| T | 返回删除的元素。 | 132 133**错误码:** 134 135以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。 136 137| 错误码ID | 错误信息 | 138| -------- | -------- | 139| 10200011 | The pop method cannot be bound. | 140 141**示例:** 142 143```ts 144let queue = new Queue<number>(); 145queue.add(2); 146queue.add(4); 147queue.add(5); 148queue.add(2); 149queue.add(4); 150let result = queue.pop(); 151console.info("result:", result); // result: 2 152``` 153 154### getFirst 155 156getFirst(): T 157 158获取队列的头元素。 159 160**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 161 162**系统能力:** SystemCapability.Utils.Lang 163 164**返回值:** 165 166| 类型 | 说明 | 167| -------- | -------- | 168| T | 返回获取的元素。 | 169 170**错误码:** 171 172以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。 173 174| 错误码ID | 错误信息 | 175| -------- | -------- | 176| 10200011 | The getFirst method cannot be bound. | 177 178**示例:** 179 180```ts 181let queue = new Queue<number>(); 182queue.add(2); 183queue.add(4); 184queue.add(5); 185queue.add(2); 186let result = queue.getFirst(); 187console.info("result:", result); // result: 2 188``` 189 190### forEach 191 192forEach(callbackFn: (value: T, index?: number, Queue?: Queue<T>) => void, 193thisArg?: Object): void 194 195在遍历Queue实例对象中每一个元素的过程中,对每个元素执行回调函数。 196 197**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 198 199**系统能力:** SystemCapability.Utils.Lang 200 201**参数:** 202 203| 参数名 | 类型 | 必填 | 说明 | 204| -------- | -------- | -------- | -------- | 205| callbackFn | function | 是 | 回调函数。 | 206| thisArg | Object | 否 | callbackfn被调用时用作this值,默认值为当前实例对象。 | 207 208callbackfn的参数说明: 209 210| 参数名 | 类型 | 必填 | 说明 | 211| -------- | -------- | -------- | -------- | 212| value | T | 是 | 当前遍历到的元素。 | 213| index | number | 否 | 当前遍历到的下标值,默认值为0。 | 214| Queue | Queue<T> | 否 | 当前调用forEach方法的实例对象,默认值为当前实例对象。 | 215 216**错误码:** 217 218以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[语言基础类库错误码](errorcode-utils.md)。 219 220| 错误码ID | 错误信息 | 221| -------- | -------- | 222| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types. | 223| 10200011 | The forEach method cannot be bound. | 224 225**示例:** 226 227```ts 228let queue = new Queue<number>(); 229queue.add(2); 230queue.add(4); 231queue.add(5); 232queue.add(4); 233queue.forEach((value: number, index: number): void => { 234 console.info("value:" + value, "index:" + index); 235}); 236// value:2 index:0 237// value:4 index:1 238// value:5 index:2 239// value:4 index:3 240``` 241 242### [Symbol.iterator] 243 244[Symbol.iterator]\(): IterableIterator<T> 245 246返回一个迭代器,每一项都是一个JavaScript对象。 247 248**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 249 250**系统能力:** SystemCapability.Utils.Lang 251 252**返回值:** 253 254| 类型 | 说明 | 255| -------- | -------- | 256| IterableIterator<T> | 返回一个迭代器。 | 257 258**错误码:** 259 260以下错误码的详细介绍请参见[语言基础类库错误码](errorcode-utils.md)。 261 262| 错误码ID | 错误信息 | 263| -------- | -------- | 264| 10200011 | The Symbol.iterator method cannot be bound. | 265 266**示例:** 267```ts 268let queue = new Queue<number>(); 269queue.add(2); 270queue.add(4); 271queue.add(5); 272queue.add(4); 273 274// 使用方法一: 275for (let value of queue) { 276 console.info("value:", value); 277} 278// value: 2 279// value: 4 280// value: 5 281// value: 4 282 283// 使用方法二: 284let iter = queue[Symbol.iterator](); 285let temp: IteratorResult<number> = iter.next().value; 286while(temp != undefined) { 287 console.info("value: " + temp); 288 temp = iter.next().value; 289} 290// value: 2 291// value: 4 292// value: 5 293// value: 4 294```