• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.util.Deque (线性容器Deque)
2
3Deque(double ended queue)根据循环队列的数据结构实现,符合先进先出以及先进后出的特点,支持两端的元素插入和移除。Deque会根据实际需要动态调整容量,每次进行两倍扩容。
4
5Deque和[Queue](js-apis-queue.md)相比,Queue的特点是先进先出,只能在头部删除元素,尾部增加元素。
6
7与[Vector](js-apis-vector.md)相比,它们都支持在两端增删元素,但Deque不能进行中间插入的操作。对头部元素的插入删除效率高于Vector,而Vector访问元素的效率高于Deque。
8
9**推荐使用场景:** 需要频繁在集合两端进行增删元素的操作时,推荐使用Deque。
10
11文档中存在泛型的使用,涉及以下泛型标记符:<br>
12- T:Type,类
13
14> **说明:**
15>
16> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
17
18
19## 导入模块
20
21```ts
22import Deque from '@ohos.util.Deque';
23```
24
25## Deque
26
27### 属性
28
29**系统能力:** SystemCapability.Utils.Lang
30
31| 名称 | 类型 | 可读 | 可写 | 说明 |
32| -------- | -------- | -------- | -------- | -------- |
33| length | number | 是 | 否 | Deque的元素个数。 |
34
35### constructor
36
37constructor()
38
39Deque的构造函数。
40
41**系统能力:** SystemCapability.Utils.Lang
42
43**错误码:**
44
45以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
46
47| 错误码ID | 错误信息 |
48| -------- | -------- |
49| 10200012 | The Deque's constructor cannot be directly invoked. |
50
51**示例:**
52
53```ts
54let deque: Deque<string | number | boolean | Object> = new Deque();
55```
56
57### insertFront
58
59insertFront(element: T): void
60
61在deque头部插入元素。
62
63**系统能力:** SystemCapability.Utils.Lang
64
65**参数:**
66
67| 参数名 | 类型 | 必填 | 说明 |
68| -------- | -------- | -------- | -------- |
69| element | T | 是 | 插入的元素。 |
70
71**错误码:**
72
73以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
74
75| 错误码ID | 错误信息 |
76| -------- | -------- |
77| 10200011 | The insertFront method cannot be bound. |
78
79**示例:**
80
81```ts
82class C1 {
83  name: string = ""
84  age: string = ""
85}
86let deque: Deque<string | number | boolean | Array<number> | C1> = new Deque();
87deque.insertFront("a");
88deque.insertFront(1);
89let b = [1, 2, 3];
90deque.insertFront(b);
91let c: C1 = {name : "Dylon", age : "13"};
92deque.insertFront(c);
93deque.insertFront(false);
94```
95
96### insertEnd
97
98insertEnd(element: T): void
99
100在deque尾部插入元素。
101
102**系统能力:** SystemCapability.Utils.Lang
103
104**参数:**
105
106| 参数名 | 类型 | 必填 | 说明 |
107| -------- | -------- | -------- | -------- |
108| element | T | 是 | 插入的元素。 |
109
110**错误码:**
111
112以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
113
114| 错误码ID | 错误信息 |
115| -------- | -------- |
116| 10200011 | The insertEnd method cannot be bound. |
117
118**示例:**
119
120```ts
121class C1 {
122  name: string = ""
123  age: string = ""
124}
125
126let deque: Deque<string | number | boolean | Array<number> | C1> = new Deque();
127deque.insertEnd("a");
128deque.insertEnd(1);
129let b = [1, 2, 3];
130deque.insertEnd(b);
131let c: C1 = {name : "Dylon", age : "13"};
132deque.insertEnd(c);
133deque.insertEnd(false);
134```
135
136### has
137
138has(element: T): boolean
139
140判断此Deque中是否含有该指定元素。
141
142**系统能力:** SystemCapability.Utils.Lang
143
144**参数:**
145
146| 参数名 | 类型 | 必填 | 说明 |
147| -------- | -------- | -------- | -------- |
148| element | T | 是 | 指定的元素。 |
149
150**返回值:**
151
152| 类型 | 说明 |
153| -------- | -------- |
154| boolean | 如果包含指定元素返回true,否则返回false。 |
155
156**错误码:**
157
158以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
159
160| 错误码ID | 错误信息 |
161| -------- | -------- |
162| 10200011 | The has method cannot be bound. |
163
164**示例:**
165
166```ts
167let deque: Deque<string> = new Deque();
168deque.insertFront("squirrel");
169let result = deque.has("squirrel");
170```
171
172### popFirst
173
174popFirst(): T
175
176删除并返回双端队列的首元素。
177
178**系统能力:** SystemCapability.Utils.Lang
179
180**返回值:**
181
182| 类型 | 说明 |
183| -------- | -------- |
184| T | 返回被删除的首元素。 |
185
186**错误码:**
187
188以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
189
190| 错误码ID | 错误信息 |
191| -------- | -------- |
192| 10200011 | The popFirst method cannot be bound. |
193
194**示例:**
195
196```ts
197let deque: Deque<number> = new Deque();
198deque.insertFront(2);
199deque.insertFront(4);
200deque.insertEnd(5);
201deque.insertFront(2);
202deque.insertFront(4);
203let result = deque.popFirst();
204```
205
206### popLast
207
208popLast(): T
209
210删除并返回双端队列的尾元素。
211
212**系统能力:** SystemCapability.Utils.Lang
213
214**返回值:**
215
216| 类型 | 说明 |
217| -------- | -------- |
218| T | 返回被删除的尾元素。 |
219
220**错误码:**
221
222以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
223
224| 错误码ID | 错误信息 |
225| -------- | -------- |
226| 10200011 | The popLast method cannot be bound. |
227
228**示例:**
229
230```ts
231let deque: Deque<number> = new Deque();
232deque.insertFront(2);
233deque.insertEnd(4);
234deque.insertFront(5);
235deque.insertFront(2);
236deque.insertFront(4);
237let result = deque.popLast();
238```
239
240### forEach
241
242forEach(callbackFn: (value: T, index?: number, deque?: Deque&lt;T&gt;) => void,
243thisArg?: Object): void
244
245通过回调函数来遍历Deque实例对象上的元素以及元素对应的下标。
246
247**系统能力:** SystemCapability.Utils.Lang
248
249**参数:**
250
251| 参数名 | 类型 | 必填 | 说明 |
252| -------- | -------- | -------- | -------- |
253| callbackFn | function | 是 | 回调函数。 |
254| thisArg | Object | 否 | callbackfn被调用时用作this值,默认值为当前实例对象。 |
255
256callbackfn的参数说明:
257
258| 参数名 | 类型 | 必填 | 说明 |
259| -------- | -------- | -------- | -------- |
260| value | T | 是 | 当前遍历到的元素。 |
261| index | number | 否 | 当前遍历到的下标值,默认值为0。 |
262| deque | Deque&lt;T&gt; | 否 | 当前调用forEach方法的实例对象,默认值为当前实例对象。 |
263
264**错误码:**
265
266以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
267
268| 错误码ID | 错误信息 |
269| -------- | -------- |
270| 10200011 | The forEach method cannot be bound. |
271
272**示例:**
273
274```ts
275let deque: Deque<number> = new Deque();
276deque.insertFront(2);
277deque.insertEnd(4);
278deque.insertFront(5);
279deque.insertEnd(4);
280deque.forEach((value: number, index?: number | undefined, deque?: Deque<number> | undefined):void => {
281  console.log("value:" + value, "index:" + index);
282});
283```
284
285### getFirst
286
287getFirst(): T
288
289获取Deque实例中的头元素。
290
291**系统能力:** SystemCapability.Utils.Lang
292
293**返回值:**
294
295| 类型 | 说明 |
296| -------- | -------- |
297| T | 返回T类型的头元素 |
298
299**错误码:**
300
301以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
302
303| 错误码ID | 错误信息 |
304| -------- | -------- |
305| 10200011 | The getFirst method cannot be bound. |
306
307**示例:**
308
309```ts
310let deque: Deque<number> = new Deque();
311deque.insertEnd(2);
312deque.insertEnd(4);
313deque.insertFront(5);
314deque.insertFront(4);
315let result = deque.getFirst();
316```
317
318### getLast
319
320getLast(): T
321
322获取Deque实例中的尾元素。
323
324**系统能力:** SystemCapability.Utils.Lang
325
326**返回值:**
327
328| 类型 | 说明 |
329| -------- | -------- |
330| T | 返回T类型的尾元素 |
331
332**错误码:**
333
334以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
335
336| 错误码ID | 错误信息 |
337| -------- | -------- |
338| 10200011 | The getLast method cannot be bound. |
339
340**示例:**
341
342```ts
343let deque: Deque<number> = new Deque();
344deque.insertFront(2);
345deque.insertFront(4);
346deque.insertFront(5);
347deque.insertFront(4);
348let result = deque.getLast();
349```
350
351### [Symbol.iterator]
352
353[Symbol.iterator]\(): IterableIterator&lt;T&gt;
354
355返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。
356
357> **说明:**
358>
359> 本接口不支持在.ets文件中使用
360
361**系统能力:** SystemCapability.Utils.Lang
362
363**返回值:**
364
365| 类型 | 说明 |
366| -------- | -------- |
367| IterableIterator&lt;T&gt; | 返回一个迭代器。 |
368
369**错误码:**
370
371以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
372
373| 错误码ID | 错误信息 |
374| -------- | -------- |
375| 10200011 | The Symbol.iterator method cannot be bound. |
376
377**示例:**
378```ts
379let deque: Deque<number> = new Deque();
380deque.insertFront(2);
381deque.insertFront(4);
382deque.insertFront(5);
383deque.insertFront(4);
384
385// 使用方法一:
386let nums: Array<number> = Array.from(deque)
387for (let item of nums) {
388  console.log("value:" + item);
389}
390
391// 使用方法二:
392let iter = deque[Symbol.iterator]();
393let temp:IteratorResult<number> = iter.next();
394while(!temp.done) {
395  console.log("value:" + temp.value);
396  temp = iter.next();
397}
398```