js-apis-stack.md 5.2 KB
Newer Older
L
linhaoran 已提交
1 2 3 4 5
# 线性容器Stack

> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。

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

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

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

L
lengchangjing 已提交
12 13 14
文档中存在泛型的使用,涉及以下泛型标记符:<br>
- T: Type, 类

L
linhaoran 已提交
15 16
## 导入模块

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




## Stack

### 属性

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

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


### constructor

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

Stack的构造函数。

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

Z
zengyawen 已提交
43
**示例:**
L
linhaoran 已提交
44

45
```ts
Z
zengyawen 已提交
46 47
let stack = new Stack();
```
L
linhaoran 已提交
48 49 50 51


### push

Z
zengyawen 已提交
52
push(item: T): T
L
linhaoran 已提交
53

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

Z
zengyawen 已提交
56 57
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
58
**参数:**
L
linhaoran 已提交
59

Z
zengyawen 已提交
60 61 62
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| item | T | 是 | 添加进去的元素。 |
L
linhaoran 已提交
63

Z
zengyawen 已提交
64 65 66 67 68 69 70 71
**返回值:**

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

**示例:**

72
```ts
Z
zengyawen 已提交
73
let stack = new Stack();
74 75
let result = stack.push("a");
let result1 = stack.push(1);
Z
zengyawen 已提交
76 77
let b = [1, 2, 3];
stack.push(b);
L
lengchangjing 已提交
78
let c = {name : "Dylon", age : "13"};
79
let result3 = stack.push(c);
Z
zengyawen 已提交
80
```
L
linhaoran 已提交
81 82 83

### pop

Z
zengyawen 已提交
84
pop(): T
L
linhaoran 已提交
85 86 87

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

Z
zengyawen 已提交
88 89
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
90 91 92 93 94 95 96 97
**返回值:**

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

**示例:**

98
```ts
Z
zengyawen 已提交
99 100 101 102 103 104
let stack = new Stack();
stack.push(2);
stack.push(4);
stack.push(5);
stack.push(2);
stack.push(4);
105
let result = stack.pop();
Z
zengyawen 已提交
106
```
L
linhaoran 已提交
107 108 109

### peek

Z
zengyawen 已提交
110
peek(): T
L
linhaoran 已提交
111 112 113

获取并返回栈顶元素。

Z
zengyawen 已提交
114 115
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
116 117 118 119 120 121 122 123
**返回值:**

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

**示例:**

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

L
linhaoran 已提交
133 134
### locate

Z
zengyawen 已提交
135
locate(element: T): number
L
linhaoran 已提交
136 137 138

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

Z
zengyawen 已提交
139 140
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
141 142 143 144 145 146 147 148 149 150 151 152 153 154
**参数:**

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

**返回值:**

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

**示例:**

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.locate(2);
Z
zengyawen 已提交
162
```
L
linhaoran 已提交
163 164

### forEach
165

L
linhaoran 已提交
166
forEach(callbackfn: (value: T, index?: number, stack?: Stack&lt;T&gt;) => void,
Z
zengyawen 已提交
167
thisArg?: Object): void
L
linhaoran 已提交
168 169 170

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

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

Z
zengyawen 已提交
173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189
**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| callbackfn | function | 是 | 回调函数。 |
| thisArg | Object | 否 | callbackfn被调用时用作this值。 |

callbackfn的参数说明:

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

**示例:**

190
```ts
Z
zengyawen 已提交
191 192 193 194 195 196
let stack = new Stack();
stack.push(2);
stack.push(4);
stack.push(5);
stack.push(4);
stack.forEach((value, index) => {
197
 console.log("value:" + value, index);
Z
zengyawen 已提交
198 199 200
});
```

L
linhaoran 已提交
201
### isEmpty
202

Z
zengyawen 已提交
203
isEmpty(): boolean
L
linhaoran 已提交
204 205 206

判断该栈是否为空。

Z
zengyawen 已提交
207 208
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
209 210 211 212 213 214 215 216
**返回值:**

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

**示例:**

217
```ts
Z
zengyawen 已提交
218 219 220 221 222
let stack = new Stack();
stack.push(2);
stack.push(4);
stack.push(5);
stack.push(4);
223
let result = stack.isEmpty();
Z
zengyawen 已提交
224
```
L
linhaoran 已提交
225 226 227

### [Symbol.iterator]

Z
zengyawen 已提交
228
[Symbol.iterator]\(): IterableIterator&lt;T&gt;
L
linhaoran 已提交
229 230 231

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

Z
zengyawen 已提交
232 233
**系统能力:** SystemCapability.Utils.Lang

Z
zengyawen 已提交
234
**返回值:**
L
linhaoran 已提交
235

Z
zengyawen 已提交
236 237 238 239 240
| 类型 | 说明 |
| -------- | -------- |
| IterableIterator&lt;T&gt; | 返回一个迭代器。 |

**示例:**
241
```ts
Z
zengyawen 已提交
242 243 244 245 246 247 248 249
let stack = new Stack();
stack.push(2);
stack.push(4);
stack.push(5);
stack.push(4);

// 使用方法一:
for (let item of stack) { 
250
  console.log("value:" + item); 
Z
zengyawen 已提交
251 252 253 254 255 256
}

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