• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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&lt;T&gt;) => 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&lt;T&gt; | 否 | 当前调用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&lt;T&gt;
245
246返回一个迭代器,每一项都是一个JavaScript对象。
247
248**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
249
250**系统能力:** SystemCapability.Utils.Lang
251
252**返回值:**
253
254| 类型 | 说明 |
255| -------- | -------- |
256| IterableIterator&lt;T&gt; | 返回一个迭代器。 |
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```