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> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** 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以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 46 47| 错误码ID | 错误信息 | 48| -------- | -------- | 49| 10200012 | The Queue's constructor cannot be directly invoked. | 50 51**示例:** 52 53```ts 54let queue = 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以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 81 82| 错误码ID | 错误信息 | 83| -------- | -------- | 84| 10200011 | The add method cannot be bound. | 85 86**示例:** 87 88```ts 89let queue = new Queue(); 90let result = queue.add("a"); 91let result1 = queue.add(1); 92let b = [1, 2, 3]; 93let result2 = queue.add(b); 94let c = {name : "Dylon", age : "13"}; 95let result3 = queue.add(c); 96``` 97 98### pop 99 100pop(): T 101 102删除头元素并返回该删除元素。 103 104**系统能力:** SystemCapability.Utils.Lang 105 106**返回值:** 107 108| 类型 | 说明 | 109| -------- | -------- | 110| T | 返回删除的元素。 | 111 112**错误码:** 113 114以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 115 116| 错误码ID | 错误信息 | 117| -------- | -------- | 118| 10200011 | The pop method cannot be bound. | 119 120**示例:** 121 122```ts 123let queue = new Queue(); 124queue.add(2); 125queue.add(4); 126queue.add(5); 127queue.add(2); 128queue.add(4); 129let result = queue.pop(); 130``` 131 132### getFirst 133 134getFirst(): T 135 136获取队列的头元素。 137 138**系统能力:** SystemCapability.Utils.Lang 139 140**返回值:** 141 142| 类型 | 说明 | 143| -------- | -------- | 144| T | 返回获取的元素。 | 145 146**错误码:** 147 148以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 149 150| 错误码ID | 错误信息 | 151| -------- | -------- | 152| 10200011 | The getFirst method cannot be bound. | 153 154**示例:** 155 156```ts 157let queue = new Queue(); 158queue.add(2); 159queue.add(4); 160queue.add(5); 161queue.add(2); 162let result = queue.getFirst(); 163``` 164 165### forEach 166 167forEach(callbackFn: (value: T, index?: number, Queue?: Queue<T>) => void, 168thisArg?: Object): void 169 170通过回调函数来遍历Queue实例对象上的元素以及元素对应的下标。 171 172**系统能力:** SystemCapability.Utils.Lang 173 174**参数:** 175 176| 参数名 | 类型 | 必填 | 说明 | 177| -------- | -------- | -------- | -------- | 178| callbackFn | function | 是 | 回调函数。 | 179| thisArg | Object | 否 | callbackfn被调用时用作this值。 | 180 181callbackfn的参数说明: 182 183| 参数名 | 类型 | 必填 | 说明 | 184| -------- | -------- | -------- | -------- | 185| value | T | 是 | 当前遍历到的元素。 | 186| index | number | 否 | 当前遍历到的下标值。 | 187| Queue | Queue<T> | 否 | 当前调用forEach方法的实例对象。 | 188 189**错误码:** 190 191以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 192 193| 错误码ID | 错误信息 | 194| -------- | -------- | 195| 10200011 | The forEach method cannot be bound. | 196 197**示例:** 198 199```ts 200let queue = new Queue(); 201queue.add(2); 202queue.add(4); 203queue.add(5); 204queue.add(4); 205queue.forEach((value, index) => { 206 console.log("value:" + value, "index:" + index); 207}); 208``` 209 210### [Symbol.iterator] 211 212[Symbol.iterator]\(): IterableIterator<T> 213 214返回一个迭代器,迭代器的每一项都是一个 JavaScript 对象,并返回该对象。 215 216**系统能力:** SystemCapability.Utils.Lang 217 218**返回值:** 219 220| 类型 | 说明 | 221| -------- | -------- | 222| IterableIterator<T> | 返回一个迭代器。 | 223 224**错误码:** 225 226以下错误码的详细介绍请参见[语言基础类库错误码](../errorcodes/errorcode-utils.md)。 227 228| 错误码ID | 错误信息 | 229| -------- | -------- | 230| 10200011 | The Symbol.iterator method cannot be bound. | 231 232**示例:** 233```ts 234let queue = new Queue(); 235queue.add(2); 236queue.add(4); 237queue.add(5); 238queue.add(4); 239 240// 使用方法一: 241for (let item of queue) { 242 console.log("value:" + item); 243} 244 245// 使用方法二: 246let iter = queue[Symbol.iterator](); 247let temp = iter.next().value; 248while(temp != undefined) { 249 console.log("value:" + temp); 250 temp = iter.next().value; 251} 252```