js-apis-stack.md 7.0 KB
Newer Older
1
# @ohos.util.Stack (线性容器Stack)
L
linhaoran 已提交
2

3 4 5 6
Stack基于数组的数据结构实现,特点是先进后出,只能在一端进行数据的插入和删除。

Stack和[Queue](js-apis-queue.md)相比,Queue基于循环队列实现,只能在一端删除,另一端插入,而Stack都在一端操作。

Z
zengyawen 已提交
7
**推荐使用场景:** 一般符合先进后出的场景可以使用Stack。
L
linhaoran 已提交
8

B
bi-hu 已提交
9 10 11 12 13 14 15
文档中存在泛型的使用,涉及以下泛型标记符:<br>
- T:Type,类

> **说明:**
>
> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。

L
lengchangjing 已提交
16

L
linhaoran 已提交
17 18
## 导入模块

19
```ts
20
import Stack from '@ohos.util.Stack';  
L
linhaoran 已提交
21 22 23 24 25 26
```

## Stack

### 属性

Z
zengyawen 已提交
27 28
**系统能力:** SystemCapability.Utils.Lang

L
liu-ganlin 已提交
29
| 名称 | 类型 | 可读 | 可写 | 说明 |
L
linhaoran 已提交
30
| -------- | -------- | -------- | -------- | -------- |
Z
zengyawen 已提交
31
| length | number | 是 | 否 | Stack的元素个数。 |
L
linhaoran 已提交
32 33 34 35


### constructor

Z
zengyawen 已提交
36
constructor()
L
linhaoran 已提交
37 38 39

Stack的构造函数。

Z
zengyawen 已提交
40 41
**系统能力:** SystemCapability.Utils.Lang

L
liu-ganlin 已提交
42 43
**错误码:**

B
bi-hu 已提交
44
以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)
L
liu-ganlin 已提交
45

L
liu-ganlin 已提交
46
| 错误码ID | 错误信息 |
L
liu-ganlin 已提交
47 48 49
| -------- | -------- |
| 10200012 | The Stack's constructor cannot be directly invoked. |

Z
zengyawen 已提交
50
**示例:**
L
linhaoran 已提交
51

52
```ts
Z
zengyawen 已提交
53 54
let stack = new Stack();
```
L
linhaoran 已提交
55 56 57 58


### push

Z
zengyawen 已提交
59
push(item: T): T
L
linhaoran 已提交
60

Z
zengyawen 已提交
61
在栈顶插入元素,并返回该元素。
L
linhaoran 已提交
62

Z
zengyawen 已提交
63 64
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
65
**参数:**
L
linhaoran 已提交
66

Z
zengyawen 已提交
67 68 69
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| item | T | 是 | 添加进去的元素。 |
L
linhaoran 已提交
70

Z
zengyawen 已提交
71 72 73 74 75 76
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| T | 返回被添加进去的元素。 |

L
liu-ganlin 已提交
77 78
**错误码:**

B
bi-hu 已提交
79
以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)
L
liu-ganlin 已提交
80

L
liu-ganlin 已提交
81
| 错误码ID | 错误信息 |
L
liu-ganlin 已提交
82 83 84
| -------- | -------- |
| 10200011 | The push method cannot be bound. |

Z
zengyawen 已提交
85 86
**示例:**

87
```ts
Z
zengyawen 已提交
88
let stack = new Stack();
89 90
let result = stack.push("a");
let result1 = stack.push(1);
Z
zengyawen 已提交
91
let b = [1, 2, 3];
L
liu-ganlin 已提交
92
let result2 = stack.push(b);
L
lengchangjing 已提交
93
let c = {name : "Dylon", age : "13"};
94
let result3 = stack.push(c);
Z
zengyawen 已提交
95
```
L
linhaoran 已提交
96 97 98

### pop

Z
zengyawen 已提交
99
pop(): T
L
linhaoran 已提交
100 101 102

删除栈顶元素并返回该删除元素。

Z
zengyawen 已提交
103 104
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
105 106 107 108 109 110
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| T | 返回删除的元素。 |

L
liu-ganlin 已提交
111 112
**错误码:**

B
bi-hu 已提交
113
以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)
L
liu-ganlin 已提交
114

L
liu-ganlin 已提交
115
| 错误码ID | 错误信息 |
L
liu-ganlin 已提交
116 117 118
| -------- | -------- |
| 10200011 | The pop method cannot be bound. |

Z
zengyawen 已提交
119 120
**示例:**

121
```ts
Z
zengyawen 已提交
122 123 124 125 126 127
let stack = new Stack();
stack.push(2);
stack.push(4);
stack.push(5);
stack.push(2);
stack.push(4);
128
let result = stack.pop();
Z
zengyawen 已提交
129
```
L
linhaoran 已提交
130 131 132

### peek

Z
zengyawen 已提交
133
peek(): T
L
linhaoran 已提交
134 135 136

获取并返回栈顶元素。

Z
zengyawen 已提交
137 138
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
139 140 141 142 143 144
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| T | 返回栈顶元素。 |

L
liu-ganlin 已提交
145 146
**错误码:**

B
bi-hu 已提交
147
以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)
L
liu-ganlin 已提交
148

L
liu-ganlin 已提交
149
| 错误码ID | 错误信息 |
L
liu-ganlin 已提交
150 151 152
| -------- | -------- |
| 10200011 | The peek method cannot be bound. |

Z
zengyawen 已提交
153 154
**示例:**

155
```ts
Z
zengyawen 已提交
156 157 158 159 160
let stack = new Stack();
stack.push(2);
stack.push(4);
stack.push(5);
stack.push(2);
161
let result = stack.peek();
Z
zengyawen 已提交
162 163
```

L
linhaoran 已提交
164 165
### locate

Z
zengyawen 已提交
166
locate(element: T): number
L
linhaoran 已提交
167 168 169

返回指定元素第一次出现时的下标值,查找失败返回-1。

Z
zengyawen 已提交
170 171
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
172 173 174 175 176 177 178 179 180 181 182 183
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| element | T | 是 | 指定元素。 |

**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| number | 找到就返回下标值,查找失败返回-1。 |

L
liu-ganlin 已提交
184 185
**错误码:**

B
bi-hu 已提交
186
以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)
L
liu-ganlin 已提交
187

L
liu-ganlin 已提交
188
| 错误码ID | 错误信息 |
L
liu-ganlin 已提交
189 190 191
| -------- | -------- |
| 10200011 | The locate method cannot be bound. |

Z
zengyawen 已提交
192 193
**示例:**

194
```ts
Z
zengyawen 已提交
195 196 197 198 199
let stack = new Stack();
stack.push(2);
stack.push(4);
stack.push(5);
stack.push(2);
200
let result = stack.locate(2);
Z
zengyawen 已提交
201
```
L
linhaoran 已提交
202 203

### forEach
204

205
forEach(callbackFn: (value: T, index?: number, stack?: Stack&lt;T&gt;) => void,
Z
zengyawen 已提交
206
thisArg?: Object): void
L
linhaoran 已提交
207 208 209

通过回调函数来遍历Stack实例对象上的元素以及元素对应的下标。

Z
zengyawen 已提交
210 211
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
212 213 214 215
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
216
| callbackFn | function | 是 | 回调函数。 |
Z
zengyawen 已提交
217 218 219 220 221 222 223 224 225 226
| thisArg | Object | 否 | callbackfn被调用时用作this值。 |

callbackfn的参数说明:

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| value | T | 是 | 当前遍历到的元素。 |
| index | number | 否 | 当前遍历到的下标值。 |
| stack | Stack&lt;T&gt; | 否 | 当前调用forEach方法的实例对象。 |

L
liu-ganlin 已提交
227 228
**错误码:**

B
bi-hu 已提交
229
以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)
L
liu-ganlin 已提交
230

L
liu-ganlin 已提交
231
| 错误码ID | 错误信息 |
L
liu-ganlin 已提交
232 233 234
| -------- | -------- |
| 10200011 | The forEach method cannot be bound. |

Z
zengyawen 已提交
235 236
**示例:**

237
```ts
Z
zengyawen 已提交
238 239 240 241 242 243
let stack = new Stack();
stack.push(2);
stack.push(4);
stack.push(5);
stack.push(4);
stack.forEach((value, index) => {
244
    console.log("value:" + value, "index:" + index);
Z
zengyawen 已提交
245 246 247
});
```

L
linhaoran 已提交
248
### isEmpty
249

Z
zengyawen 已提交
250
isEmpty(): boolean
L
linhaoran 已提交
251 252 253

判断该栈是否为空。

Z
zengyawen 已提交
254 255
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
256 257 258 259 260 261
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| boolean | 为空返回true,不为空返回false。 |

L
liu-ganlin 已提交
262 263
**错误码:**

B
bi-hu 已提交
264
以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)
L
liu-ganlin 已提交
265

L
liu-ganlin 已提交
266
| 错误码ID | 错误信息 |
L
liu-ganlin 已提交
267 268 269
| -------- | -------- |
| 10200011 | The isEmpty method cannot be bound. |

Z
zengyawen 已提交
270 271
**示例:**

272
```ts
Z
zengyawen 已提交
273 274 275 276 277
let stack = new Stack();
stack.push(2);
stack.push(4);
stack.push(5);
stack.push(4);
278
let result = stack.isEmpty();
Z
zengyawen 已提交
279
```
L
linhaoran 已提交
280 281 282

### [Symbol.iterator]

Z
zengyawen 已提交
283
[Symbol.iterator]\(): IterableIterator&lt;T&gt;
L
linhaoran 已提交
284 285 286

返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。

Z
zengyawen 已提交
287 288
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
289
**返回值:**
L
linhaoran 已提交
290

Z
zengyawen 已提交
291 292 293 294
| 类型 | 说明 |
| -------- | -------- |
| IterableIterator&lt;T&gt; | 返回一个迭代器。 |

L
liu-ganlin 已提交
295 296
**错误码:**

B
bi-hu 已提交
297
以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)
L
liu-ganlin 已提交
298

L
liu-ganlin 已提交
299
| 错误码ID | 错误信息 |
L
liu-ganlin 已提交
300 301 302
| -------- | -------- |
| 10200011 | The Symbol.iterator method cannot be bound. |

Z
zengyawen 已提交
303
**示例:**
304
```ts
Z
zengyawen 已提交
305 306 307 308 309 310 311 312
let stack = new Stack();
stack.push(2);
stack.push(4);
stack.push(5);
stack.push(4);

// 使用方法一:
for (let item of stack) { 
313
  console.log("value:" + item); 
Z
zengyawen 已提交
314 315 316 317 318 319
}

// 使用方法二:
let iter = stack[Symbol.iterator]();
let temp = iter.next().value;
while(temp != undefined) {
320
  console.log("value:" + temp);
Z
zengyawen 已提交
321 322 323
  temp = iter.next().value;
}
```