• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.util.Stack (线性容器Stack)
2
3Stack基于数组的数据结构实现,特点是先进后出,只能在一端进行数据的插入和删除。
4
5Stack和[Queue](js-apis-queue.md)相比,Queue基于循环队列实现,只能在一端删除,另一端插入,而Stack都在一端操作。
6
7**推荐使用场景:** 一般符合先进后出的场景可以使用Stack。
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 Stack from '@ohos.util.Stack';
21```
22
23## Stack
24
25### 属性
26
27**系统能力:** SystemCapability.Utils.Lang
28
29| 名称 | 类型 | 可读 | 可写 | 说明 |
30| -------- | -------- | -------- | -------- | -------- |
31| length | number | 是 | 否 | Stack的元素个数。 |
32
33
34### constructor
35
36constructor()
37
38Stack的构造函数。
39
40**系统能力:** SystemCapability.Utils.Lang
41
42**错误码:**
43
44以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
45
46| 错误码ID | 错误信息 |
47| -------- | -------- |
48| 10200012 | The Stack's constructor cannot be directly invoked. |
49
50**示例:**
51
52```ts
53let stack = new Stack();
54```
55
56
57### push
58
59push(item: T): T
60
61在栈顶插入元素,并返回该元素。
62
63**系统能力:** SystemCapability.Utils.Lang
64
65**参数:**
66
67| 参数名 | 类型 | 必填 | 说明 |
68| -------- | -------- | -------- | -------- |
69| item | T | 是 | 添加进去的元素。 |
70
71**返回值:**
72
73| 类型 | 说明 |
74| -------- | -------- |
75| T | 返回被添加进去的元素。 |
76
77**错误码:**
78
79以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
80
81| 错误码ID | 错误信息 |
82| -------- | -------- |
83| 10200011 | The push method cannot be bound. |
84
85**示例:**
86
87```ts
88let stack = new Stack();
89let result = stack.push("a");
90let result1 = stack.push(1);
91let b = [1, 2, 3];
92let result2 = stack.push(b);
93let c = {name : "Dylon", age : "13"};
94let result3 = stack.push(c);
95```
96
97### pop
98
99pop(): T
100
101删除栈顶元素并返回该删除元素。
102
103**系统能力:** SystemCapability.Utils.Lang
104
105**返回值:**
106
107| 类型 | 说明 |
108| -------- | -------- |
109| T | 返回删除的元素。 |
110
111**错误码:**
112
113以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
114
115| 错误码ID | 错误信息 |
116| -------- | -------- |
117| 10200011 | The pop method cannot be bound. |
118
119**示例:**
120
121```ts
122let stack = new Stack();
123stack.push(2);
124stack.push(4);
125stack.push(5);
126stack.push(2);
127stack.push(4);
128let result = stack.pop();
129```
130
131### peek
132
133peek(): T
134
135获取并返回栈顶元素。
136
137**系统能力:** SystemCapability.Utils.Lang
138
139**返回值:**
140
141| 类型 | 说明 |
142| -------- | -------- |
143| T | 返回栈顶元素。 |
144
145**错误码:**
146
147以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
148
149| 错误码ID | 错误信息 |
150| -------- | -------- |
151| 10200011 | The peek method cannot be bound. |
152
153**示例:**
154
155```ts
156let stack = new Stack();
157stack.push(2);
158stack.push(4);
159stack.push(5);
160stack.push(2);
161let result = stack.peek();
162```
163
164### locate
165
166locate(element: T): number
167
168返回指定元素第一次出现时的下标值,查找失败返回-1。
169
170**系统能力:** SystemCapability.Utils.Lang
171
172**参数:**
173
174| 参数名 | 类型 | 必填 | 说明 |
175| -------- | -------- | -------- | -------- |
176| element | T | 是 | 指定元素。 |
177
178**返回值:**
179
180| 类型 | 说明 |
181| -------- | -------- |
182| number | 找到就返回下标值,查找失败返回-1。 |
183
184**错误码:**
185
186以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
187
188| 错误码ID | 错误信息 |
189| -------- | -------- |
190| 10200011 | The locate method cannot be bound. |
191
192**示例:**
193
194```ts
195let stack = new Stack();
196stack.push(2);
197stack.push(4);
198stack.push(5);
199stack.push(2);
200let result = stack.locate(2);
201```
202
203### forEach
204
205forEach(callbackFn: (value: T, index?: number, stack?: Stack&lt;T&gt;) => void,
206thisArg?: Object): void
207
208通过回调函数来遍历Stack实例对象上的元素以及元素对应的下标。
209
210**系统能力:** SystemCapability.Utils.Lang
211
212**参数:**
213
214| 参数名 | 类型 | 必填 | 说明 |
215| -------- | -------- | -------- | -------- |
216| callbackFn | function | 是 | 回调函数。 |
217| thisArg | Object | 否 | callbackfn被调用时用作this值。 |
218
219callbackfn的参数说明:
220
221| 参数名 | 类型 | 必填 | 说明 |
222| -------- | -------- | -------- | -------- |
223| value | T | 是 | 当前遍历到的元素。 |
224| index | number | 否 | 当前遍历到的下标值。 |
225| stack | Stack&lt;T&gt; | 否 | 当前调用forEach方法的实例对象。 |
226
227**错误码:**
228
229以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
230
231| 错误码ID | 错误信息 |
232| -------- | -------- |
233| 10200011 | The forEach method cannot be bound. |
234
235**示例:**
236
237```ts
238let stack = new Stack();
239stack.push(2);
240stack.push(4);
241stack.push(5);
242stack.push(4);
243stack.forEach((value, index) => {
244    console.log("value:" + value, "index:" + index);
245});
246```
247
248### isEmpty
249
250isEmpty(): boolean
251
252判断该栈是否为空。
253
254**系统能力:** SystemCapability.Utils.Lang
255
256**返回值:**
257
258| 类型 | 说明 |
259| -------- | -------- |
260| boolean | 为空返回true,不为空返回false。 |
261
262**错误码:**
263
264以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
265
266| 错误码ID | 错误信息 |
267| -------- | -------- |
268| 10200011 | The isEmpty method cannot be bound. |
269
270**示例:**
271
272```ts
273let stack = new Stack();
274stack.push(2);
275stack.push(4);
276stack.push(5);
277stack.push(4);
278let result = stack.isEmpty();
279```
280
281### [Symbol.iterator]
282
283[Symbol.iterator]\(): IterableIterator&lt;T&gt;
284
285返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。
286
287**系统能力:** SystemCapability.Utils.Lang
288
289**返回值:**
290
291| 类型 | 说明 |
292| -------- | -------- |
293| IterableIterator&lt;T&gt; | 返回一个迭代器。 |
294
295**错误码:**
296
297以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。
298
299| 错误码ID | 错误信息 |
300| -------- | -------- |
301| 10200011 | The Symbol.iterator method cannot be bound. |
302
303**示例:**
304```ts
305let stack = new Stack();
306stack.push(2);
307stack.push(4);
308stack.push(5);
309stack.push(4);
310
311// 使用方法一:
312for (let item of stack) {
313  console.log("value:" + item);
314}
315
316// 使用方法二:
317let iter = stack[Symbol.iterator]();
318let temp = iter.next().value;
319while(temp != undefined) {
320  console.log("value:" + temp);
321  temp = iter.next().value;
322}
323```