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<T>) => 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<T> | 否 | 当前调用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<T> 284 285返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。 286 287**系统能力:** SystemCapability.Utils.Lang 288 289**返回值:** 290 291| 类型 | 说明 | 292| -------- | -------- | 293| IterableIterator<T> | 返回一个迭代器。 | 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```