• 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();
159deque.insertFront("squirrel");
160let result = deque.has("squirrel");
161```
162
163### popFirst
164
165popFirst(): T
166
167删除并返回双端队列的首元素。
168
169**系统能力:** SystemCapability.Utils.Lang
170
171**返回值:**
172
173| 类型 | 说明 |
174| -------- | -------- |
175| T | 返回被删除的首元素。 |
176
177**错误码:**
178
179以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
180
181| 错误码ID | 错误信息 |
182| -------- | -------- |
183| 10200011 | The popFirst method cannot be bound. |
184
185**示例:**
186
187```ts
188let deque = new Deque();
189deque.insertFront(2);
190deque.insertFront(4);
191deque.insertEnd(5);
192deque.insertFront(2);
193deque.insertFront(4);
194let result = deque.popFirst();
195```
196
197### popLast
198
199popLast(): T
200
201删除并返回双端队列的尾元素。
202
203**系统能力:** SystemCapability.Utils.Lang
204
205**返回值:**
206
207| 类型 | 说明 |
208| -------- | -------- |
209| T | 返回被删除的尾元素。 |
210
211**错误码:**
212
213以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
214
215| 错误码ID | 错误信息 |
216| -------- | -------- |
217| 10200011 | The popLast method cannot be bound. |
218
219**示例:**
220
221```ts
222let deque = new Deque();
223deque.insertFront(2);
224deque.insertEnd(4);
225deque.insertFront(5);
226deque.insertFront(2);
227deque.insertFront(4);
228let result = deque.popLast();
229```
230
231### forEach
232
233forEach(callbackFn: (value: T, index?: number, deque?: Deque&lt;T&gt;) => void,
234thisArg?: Object): void
235
236通过回调函数来遍历Deque实例对象上的元素以及元素对应的下标。
237
238**系统能力:** SystemCapability.Utils.Lang
239
240**参数:**
241
242| 参数名 | 类型 | 必填 | 说明 |
243| -------- | -------- | -------- | -------- |
244| callbackFn | function | 是 | 回调函数。 |
245| thisArg | Object | 否 | callbackfn被调用时用作this值。 |
246
247callbackfn的参数说明:
248
249| 参数名 | 类型 | 必填 | 说明 |
250| -------- | -------- | -------- | -------- |
251| value | T | 是 | 当前遍历到的元素。 |
252| index | number | 否 | 当前遍历到的下标值。 |
253| deque | Deque&lt;T&gt; | 否 | 当前调用forEach方法的实例对象。 |
254
255**错误码:**
256
257以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
258
259| 错误码ID | 错误信息 |
260| -------- | -------- |
261| 10200011 | The forEach method cannot be bound. |
262
263**示例:**
264
265```ts
266let deque = new Deque();
267deque.insertFront(2);
268deque.insertEnd(4);
269deque.insertFront(5);
270deque.insertEnd(4);
271deque.forEach((value, index) => {
272    console.log("value:" + value, "index:" + index);
273});
274```
275
276### getFirst
277
278getFirst(): T
279
280获取Deque实例中的头元素。
281
282**系统能力:** SystemCapability.Utils.Lang
283
284**返回值:**
285
286| 类型 | 说明 |
287| -------- | -------- |
288| T | 返回T型 |
289
290**错误码:**
291
292以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
293
294| 错误码ID | 错误信息 |
295| -------- | -------- |
296| 10200011 | The getFirst method cannot be bound. |
297
298**示例:**
299
300```ts
301let deque = new Deque();
302deque.insertEnd(2);
303deque.insertEnd(4);
304deque.insertFront(5);
305deque.insertFront(4);
306let result = deque.getFirst();
307```
308
309### getLast
310
311getLast(): T
312
313获取Deque实例中的尾元素。
314
315**系统能力:** SystemCapability.Utils.Lang
316
317**返回值:**
318
319| 类型 | 说明 |
320| -------- | -------- |
321| T | 返回T型 |
322
323**错误码:**
324
325以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
326
327| 错误码ID | 错误信息 |
328| -------- | -------- |
329| 10200011 | The getLast method cannot be bound. |
330
331**示例:**
332
333```ts
334let deque = new Deque();
335deque.insertFront(2);
336deque.insertFront(4);
337deque.insertFront(5);
338deque.insertFront(4);
339let result = deque.getLast();
340```
341
342### [Symbol.iterator]
343
344[Symbol.iterator]\(): IterableIterator&lt;T&gt;
345
346返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。
347
348**系统能力:** SystemCapability.Utils.Lang
349
350**返回值:**
351
352| 类型 | 说明 |
353| -------- | -------- |
354| IterableIterator&lt;T&gt; | 返回一个迭代器。 |
355
356**错误码:**
357
358以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
359
360| 错误码ID | 错误信息 |
361| -------- | -------- |
362| 10200011 | The Symbol.iterator method cannot be bound. |
363
364**示例:**
365```ts
366let deque = new Deque();
367deque.insertFront(2);
368deque.insertFront(4);
369deque.insertFront(5);
370deque.insertFront(4);
371
372// 使用方法一:
373for (let item of deque) {
374  console.log("value:" + item);
375}
376
377// 使用方法二:
378let iter = deque[Symbol.iterator]();
379let temp = iter.next().value;
380while(temp != undefined) {
381  console.log("value:" + temp);
382  temp = iter.next().value;
383}
384```