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