• 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> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
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 = 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
82let deque = new Deque();
83deque.insertFront("a");
84deque.insertFront(1);
85let b = [1, 2, 3];
86deque.insertFront(b);
87let c = {name : "Dylon", age : "13"};
88deque.insertFront(c);
89deque.insertFront(false);
90```
91
92### insertEnd
93
94insertEnd(element: T): void
95
96在deque尾部插入元素。
97
98**系统能力:** SystemCapability.Utils.Lang
99
100**参数:**
101
102| 参数名 | 类型 | 必填 | 说明 |
103| -------- | -------- | -------- | -------- |
104| element | T | 是 | 插入的元素。 |
105
106**错误码:**
107
108以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
109
110| 错误码ID | 错误信息 |
111| -------- | -------- |
112| 10200011 | The insertEnd method cannot be bound. |
113
114**示例:**
115
116```ts
117let deque = new Deque();
118deque.insertEnd("a");
119deque.insertEnd(1);
120let b = [1, 2, 3];
121deque.insertEnd(b);
122let c = {name : "Dylon", age : "13"};
123deque.insertEnd(c);
124deque.insertEnd(false);
125```
126
127### has
128
129has(element: T): boolean
130
131判断此Deque中是否含有该指定元素。
132
133**系统能力:** SystemCapability.Utils.Lang
134
135**参数:**
136
137| 参数名 | 类型 | 必填 | 说明 |
138| -------- | -------- | -------- | -------- |
139| element | T | 是 | 指定的元素。 |
140
141**返回值:**
142
143| 类型 | 说明 |
144| -------- | -------- |
145| boolean | 如果包含指定元素返回true,否则返回false。 |
146
147**错误码:**
148
149以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
150
151| 错误码ID | 错误信息 |
152| -------- | -------- |
153| 10200011 | The has method cannot be bound. |
154
155**示例:**
156
157```ts
158let deque = new Deque();
159let result = deque.has("squirrel");
160deque.insertFront("squirrel");
161let result1 = deque.has("squirrel");
162```
163
164### popFirst
165
166popFirst(): T
167
168删除并返回双端队列的首元素。
169
170**系统能力:** SystemCapability.Utils.Lang
171
172**返回值:**
173
174| 类型 | 说明 |
175| -------- | -------- |
176| T | 返回被删除的首元素。 |
177
178**错误码:**
179
180以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
181
182| 错误码ID | 错误信息 |
183| -------- | -------- |
184| 10200011 | The popFirst method cannot be bound. |
185
186**示例:**
187
188```ts
189let deque = new Deque();
190deque.insertFront(2);
191deque.insertFront(4);
192deque.insertEnd(5);
193deque.insertFront(2);
194deque.insertFront(4);
195let result = deque.popFirst();
196```
197
198### popLast
199
200popLast(): T
201
202删除并返回双端队列的尾元素。
203
204**系统能力:** SystemCapability.Utils.Lang
205
206**返回值:**
207
208| 类型 | 说明 |
209| -------- | -------- |
210| T | 返回被删除的尾元素。 |
211
212**错误码:**
213
214以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
215
216| 错误码ID | 错误信息 |
217| -------- | -------- |
218| 10200011 | The popLast method cannot be bound. |
219
220**示例:**
221
222```ts
223let deque = new Deque();
224deque.insertFront(2);
225deque.insertEnd(4);
226deque.insertFront(5);
227deque.insertFront(2);
228deque.insertFront(4);
229let result = deque.popLast();
230```
231
232### forEach
233
234forEach(callbackFn: (value: T, index?: number, deque?: Deque&lt;T&gt;) => void,
235thisArg?: Object): void
236
237通过回调函数来遍历Deque实例对象上的元素以及元素对应的下标。
238
239**系统能力:** SystemCapability.Utils.Lang
240
241**参数:**
242
243| 参数名 | 类型 | 必填 | 说明 |
244| -------- | -------- | -------- | -------- |
245| callbackFn | function | 是 | 回调函数。 |
246| thisArg | Object | 否 | callbackfn被调用时用作this值。 |
247
248callbackfn的参数说明:
249
250| 参数名 | 类型 | 必填 | 说明 |
251| -------- | -------- | -------- | -------- |
252| value | T | 是 | 当前遍历到的元素。 |
253| index | number | 否 | 当前遍历到的下标值。 |
254| deque | Deque&lt;T&gt; | 否 | 当前调用forEach方法的实例对象。 |
255
256**错误码:**
257
258以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
259
260| 错误码ID | 错误信息 |
261| -------- | -------- |
262| 10200011 | The forEach method cannot be bound. |
263
264**示例:**
265
266```ts
267let deque = new Deque();
268deque.insertFront(2);
269deque.insertEnd(4);
270deque.insertFront(5);
271deque.insertEnd(4);
272deque.forEach((value, index) => {
273    console.log("value:" + value, "index:" + index);
274});
275```
276
277### getFirst
278
279getFirst(): T
280
281获取Deque实例中的头元素。
282
283**系统能力:** SystemCapability.Utils.Lang
284
285**返回值:**
286
287| 类型 | 说明 |
288| -------- | -------- |
289| T | 返回T型 |
290
291**错误码:**
292
293以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
294
295| 错误码ID | 错误信息 |
296| -------- | -------- |
297| 10200011 | The getFirst method cannot be bound. |
298
299**示例:**
300
301```ts
302let deque = new Deque();
303deque.insertEnd(2);
304deque.insertEnd(4);
305deque.insertFront(5);
306deque.insertFront(4);
307let result = deque.getFirst();
308```
309
310### getLast
311
312getLast(): T
313
314获取Deque实例中的尾元素。
315
316**系统能力:** SystemCapability.Utils.Lang
317
318**返回值:**
319
320| 类型 | 说明 |
321| -------- | -------- |
322| T | 返回T型 |
323
324**错误码:**
325
326以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
327
328| 错误码ID | 错误信息 |
329| -------- | -------- |
330| 10200011 | The getLast method cannot be bound. |
331
332**示例:**
333
334```ts
335let deque = new Deque();
336deque.insertFront(2);
337deque.insertFront(4);
338deque.insertFront(5);
339deque.insertFront(4);
340let result = deque.getLast();
341```
342
343### [Symbol.iterator]
344
345[Symbol.iterator]\(): IterableIterator&lt;T&gt;
346
347返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。
348
349**系统能力:** SystemCapability.Utils.Lang
350
351**返回值:**
352
353| 类型 | 说明 |
354| -------- | -------- |
355| IterableIterator&lt;T&gt; | 返回一个迭代器。 |
356
357**错误码:**
358
359以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
360
361| 错误码ID | 错误信息 |
362| -------- | -------- |
363| 10200011 | The Symbol.iterator method cannot be bound. |
364
365**示例:**
366```ts
367let deque = new Deque();
368deque.insertFront(2);
369deque.insertFront(4);
370deque.insertFront(5);
371deque.insertFront(4);
372
373// 使用方法一:
374for (let item of deque) {
375  console.log("value:" + item);
376}
377
378// 使用方法二:
379let iter = deque[Symbol.iterator]();
380let temp = iter.next().value;
381while(temp != undefined) {
382  console.log("value:" + temp);
383  temp = iter.next().value;
384}
385```