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```