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