• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 线性容器Stack
2
3> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
4> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
5
6Stack基于数组的数据结构实现,特点是先进后出,只能在一端进行数据的插入和删除。
7
8Stack和[Queue](js-apis-queue.md)相比,Queue基于循环队列实现,只能在一端删除,另一端插入,而Stack都在一端操作。
9
10**推荐使用场景:** 一般符合先进后出的场景可以使用Stack。
11
12## 导入模块
13
14```ts
15import Stack from '@ohos.util.Stack';
16```
17
18
19
20
21## Stack
22
23### 属性
24
25**系统能力:** SystemCapability.Utils.Lang
26
27| 名称 | 参数类型 | 可读 | 可写 | 说明 |
28| -------- | -------- | -------- | -------- | -------- |
29| length | number | 是 | 否 | Stack的元素个数。 |
30
31
32### constructor
33
34constructor()
35
36Stack的构造函数。
37
38**系统能力:** SystemCapability.Utils.Lang
39
40**示例:**
41
42```ts
43let stack = new Stack();
44```
45
46
47### push
48
49push(item: T): T
50
51在栈顶插入元素,并返回该元素。
52
53**系统能力:** SystemCapability.Utils.Lang
54
55**参数:**
56
57| 参数名 | 类型 | 必填 | 说明 |
58| -------- | -------- | -------- | -------- |
59| item | T | 是 | 添加进去的元素。 |
60
61**返回值:**
62
63| 类型 | 说明 |
64| -------- | -------- |
65| T | 返回被添加进去的元素。 |
66
67**示例:**
68
69```ts
70let stack = new Stack();
71let result = stack.push("a");
72let result1 = stack.push(1);
73let b = [1, 2, 3];
74stack.push(b);
75let c = {name : "lala", age : "13"};
76let result3 = stack.push(c);
77```
78
79### pop
80
81pop(): T
82
83删除栈顶元素并返回该删除元素。
84
85**系统能力:** SystemCapability.Utils.Lang
86
87**返回值:**
88
89| 类型 | 说明 |
90| -------- | -------- |
91| T | 返回删除的元素。 |
92
93**示例:**
94
95```ts
96let stack = new Stack();
97stack.push(2);
98stack.push(4);
99stack.push(5);
100stack.push(2);
101stack.push(4);
102let result = stack.pop();
103```
104
105### peek
106
107peek(): T
108
109获取并返回栈顶元素。
110
111**系统能力:** SystemCapability.Utils.Lang
112
113**返回值:**
114
115| 类型 | 说明 |
116| -------- | -------- |
117| T | 返回栈顶元素。 |
118
119**示例:**
120
121```ts
122let stack = new Stack();
123stack.push(2);
124stack.push(4);
125stack.push(5);
126stack.push(2);
127let result = stack.peek();
128```
129
130### locate
131
132locate(element: T): number
133
134返回指定元素第一次出现时的下标值,查找失败返回-1。
135
136**系统能力:** SystemCapability.Utils.Lang
137
138**参数:**
139
140| 参数名 | 类型 | 必填 | 说明 |
141| -------- | -------- | -------- | -------- |
142| element | T | 是 | 指定元素。 |
143
144**返回值:**
145
146| 类型 | 说明 |
147| -------- | -------- |
148| number | 找到就返回下标值,查找失败返回-1。 |
149
150**示例:**
151
152```ts
153let stack = new Stack();
154stack.push(2);
155stack.push(4);
156stack.push(5);
157stack.push(2);
158let result = stack.locate(2);
159```
160
161### forEach
162
163forEach(callbackfn: (value: T, index?: number, stack?: Stack<T>) => void,
164thisArg?: Object): void
165
166通过回调函数来遍历Stack实例对象上的元素以及元素对应的下标。
167
168**系统能力:** SystemCapability.Utils.Lang
169
170**参数:**
171
172| 参数名 | 类型 | 必填 | 说明 |
173| -------- | -------- | -------- | -------- |
174| callbackfn | function | 是 | 回调函数。 |
175| thisArg | Object | 否 | callbackfn被调用时用作this值。 |
176
177callbackfn的参数说明:
178
179| 参数名 | 类型 | 必填 | 说明 |
180| -------- | -------- | -------- | -------- |
181| value | T | 是 | 当前遍历到的元素。 |
182| index | number | 否 | 当前遍历到的下标值。 |
183| stack | Stack<T> | 否 | 当前调用forEach方法的实例对象。 |
184
185**示例:**
186
187```ts
188let stack = new Stack();
189stack.push(2);
190stack.push(4);
191stack.push(5);
192stack.push(4);
193stack.forEach((value, index) => {
194    console.log("value:" + value, "index:" + index);
195});
196```
197
198### isEmpty
199
200isEmpty(): boolean
201
202判断该栈是否为空。
203
204**系统能力:** SystemCapability.Utils.Lang
205
206**返回值:**
207
208| 类型 | 说明 |
209| -------- | -------- |
210| boolean | 为空返回true,不为空返回false。 |
211
212**示例:**
213
214```ts
215let stack = new Stack();
216stack.push(2);
217stack.push(4);
218stack.push(5);
219stack.push(4);
220let result = stack.isEmpty();
221```
222
223### [Symbol.iterator]
224
225[Symbol.iterator]\(): IterableIterator<T>
226
227返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。
228
229**系统能力:** SystemCapability.Utils.Lang
230
231**返回值:**
232
233| 类型 | 说明 |
234| -------- | -------- |
235| IterableIterator<T> | 返回一个迭代器。 |
236
237**示例:**
238```ts
239let stack = new Stack();
240stack.push(2);
241stack.push(4);
242stack.push(5);
243stack.push(4);
244
245// 使用方法一:
246for (let item of stack) {
247  console.log("value:" + item);
248}
249
250// 使用方法二:
251let iter = stack[Symbol.iterator]();
252let temp = iter.next().value;
253while(temp != undefined) {
254  console.log("value:" + temp);
255  temp = iter.next().value;
256}
257```