• 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> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
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以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
46
47| 错误码ID | 错误信息 |
48| -------- | -------- |
49| 10200012 | The Queue's constructor cannot be directly invoked. |
50
51**示例:**
52
53```ts
54let queue = 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以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
81
82| 错误码ID | 错误信息 |
83| -------- | -------- |
84| 10200011 | The add method cannot be bound. |
85
86**示例:**
87
88```ts
89let queue = new Queue();
90let result = queue.add("a");
91let result1 = queue.add(1);
92let b = [1, 2, 3];
93let result2 = queue.add(b);
94let c = {name : "Dylon", age : "13"};
95let result3 = queue.add(c);
96```
97
98### pop
99
100pop(): T
101
102删除头元素并返回该删除元素。
103
104**系统能力:** SystemCapability.Utils.Lang
105
106**返回值:**
107
108| 类型 | 说明 |
109| -------- | -------- |
110| T | 返回删除的元素。 |
111
112**错误码:**
113
114以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
115
116| 错误码ID | 错误信息 |
117| -------- | -------- |
118| 10200011 | The pop method cannot be bound. |
119
120**示例:**
121
122```ts
123let queue = new Queue();
124queue.add(2);
125queue.add(4);
126queue.add(5);
127queue.add(2);
128queue.add(4);
129let result = queue.pop();
130```
131
132### getFirst
133
134getFirst(): T
135
136获取队列的头元素。
137
138**系统能力:** SystemCapability.Utils.Lang
139
140**返回值:**
141
142| 类型 | 说明 |
143| -------- | -------- |
144| T | 返回获取的元素。 |
145
146**错误码:**
147
148以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
149
150| 错误码ID | 错误信息 |
151| -------- | -------- |
152| 10200011 | The getFirst method cannot be bound. |
153
154**示例:**
155
156```ts
157let queue = new Queue();
158queue.add(2);
159queue.add(4);
160queue.add(5);
161queue.add(2);
162let result = queue.getFirst();
163```
164
165### forEach
166
167forEach(callbackFn: (value: T, index?: number, Queue?: Queue&lt;T&gt;) => void,
168thisArg?: Object): void
169
170通过回调函数来遍历Queue实例对象上的元素以及元素对应的下标。
171
172**系统能力:** SystemCapability.Utils.Lang
173
174**参数:**
175
176| 参数名 | 类型 | 必填 | 说明 |
177| -------- | -------- | -------- | -------- |
178| callbackFn | function | 是 | 回调函数。 |
179| thisArg | Object | 否 | callbackfn被调用时用作this值。 |
180
181callbackfn的参数说明:
182
183| 参数名 | 类型 | 必填 | 说明 |
184| -------- | -------- | -------- | -------- |
185| value | T | 是 | 当前遍历到的元素。 |
186| index | number | 否 | 当前遍历到的下标值。 |
187| Queue | Queue&lt;T&gt; | 否 | 当前调用forEach方法的实例对象。 |
188
189**错误码:**
190
191以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
192
193| 错误码ID | 错误信息 |
194| -------- | -------- |
195| 10200011 | The forEach method cannot be bound. |
196
197**示例:**
198
199```ts
200let queue = new Queue();
201queue.add(2);
202queue.add(4);
203queue.add(5);
204queue.add(4);
205queue.forEach((value, index) => {
206    console.log("value:" + value, "index:" + index);
207});
208```
209
210### [Symbol.iterator]
211
212[Symbol.iterator]\(): IterableIterator&lt;T&gt;
213
214返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。
215
216**系统能力:** SystemCapability.Utils.Lang
217
218**返回值:**
219
220| 类型 | 说明 |
221| -------- | -------- |
222| IterableIterator&lt;T&gt; | 返回一个迭代器。 |
223
224**错误码:**
225
226以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
227
228| 错误码ID | 错误信息 |
229| -------- | -------- |
230| 10200011 | The Symbol.iterator method cannot be bound. |
231
232**示例:**
233```ts
234let queue = new Queue();
235queue.add(2);
236queue.add(4);
237queue.add(5);
238queue.add(4);
239
240// 使用方法一:
241for (let item of queue) {
242  console.log("value:" + item);
243}
244
245// 使用方法二:
246let iter = queue[Symbol.iterator]();
247let temp = iter.next().value;
248while(temp != undefined) {
249  console.log("value:" + temp);
250  temp = iter.next().value;
251}
252```