HarmonyOS 5.0應用開發——ArkTS容器類

高心星發表於2024-12-10

【高心星出品】

容器類

線性容器類

線性容器實現能按順序訪問的資料結構,其底層主要透過陣列實現,包括ArrayList、Vector(已廢棄)、List、LinkedList、Deque、Queue、Stack七種。

ArrayList

一種陣列物件,最簡單的容器型別。

// arraylist元素
export function arraylist() {
  let al = new ArrayList()
  // 末尾新增元素
  al.add('str')
  al.add(10)
  // 某個位置插入元素
  al.insert(true, 1)
  // 迴圈遍歷元素 for-of結構
  for (const element of al) {
    console.info(element+'   gxxt')
  }
  // foreach結構
  al.forEach((value, index) => {
    console.info(`${index}--${value}  gxxt`)
  }, value => JSON.stringify(value))
  // 更新某個元素的值
  al[0] = 'str1'
  //  查詢是否有某個元素
  let hasstr1 = al.has('str1')
  console.info(hasstr1+'  gxxt')
  // 移除元素
  al.removeByIndex(0)
  //   移除某個範圍內的元素
  al.removeByRange(0, 2)

}

List

List可用來構造一個單向連結串列物件,即只能透過頭節點開始訪問到尾節點。List依據泛型定義,在記憶體中的儲存位置可以是不連續的。

相對於ArrayList,List的插入刪除效率要更優秀。

// list 單連結串列  
export function list() {
  let list = new List()
  list.add('str')
  list.add(1)
  list.insert('ok', 1)
  // 根據下標取出元素
  let a = list.get(1)
  //  取出頭元素
  let first = list.getFirst()
  //  取出尾元素
  let last = list.getLast()
  // 更新某個下標對應的元素
  list.set(1, 'gaga')
  console.info(`gxxt ${a}, ${first}, ${last}`)

}

list容器通用arraylist容器,並有自己的方法。

LinkedList

使用方式和List是一樣的,只不過LinkedList是雙向連結串列,LinkedList和List相比,LinkedList是雙向連結串列,可以快速地在頭尾進行增刪,而List是單向連結串列,無法雙向操作。

Queue

Queue可用來構造佇列物件,儲存元素遵循先進先出的規則。

export function queue()
{
  let que=new Queue()
  // 隊尾加入元素
  que.add('str')
  que.add(1)
  que.add(true)
  // 獲取隊首元素
  let first=que.getFirst()
  // 出隊元素便返回
  let ff=que.pop()
  let ff1=que.pop()
  console.info(`gxxt ${first}, ${ff}, ${ff1}`)
}

Stack

Stack可用來構造棧物件,儲存元素遵循先進後出的規則。

// stack 棧物件
export function stack()
{
  let stack=new Stack()
  // 壓入棧
  stack.push('str')
  stack.push(1)
  stack.push(true)
  // 獲取棧頂元素
  let first=stack.peek()
  // 出棧
  let ff=stack.pop()
  console.log('gxxt '+first+'  '+ff)
  // 遍歷stack
  stack.forEach((item,index)=>{
    console.log(item+'')
  })

}

非線性容器

HashMap

HashMap可用來儲存具有關聯關係的key-value鍵值對集合,儲存元素中key是唯一的,每個key會對應一個value值。

// hashmap
  export function hashmap()
  {
    let hm=new HashMap()
    // 增加元素 無序
    hm.set('one','item1')
    hm.set(2,'item2')
    hm.set(3,'item3')
  //   取出元素
    if (hm.hasKey(2)) {
      let value = hm.get(2)
    }
    // 取出所有的鍵
    let keys=hm.keys()
    for (const element of keys) {
      console.info('gxxt '+element)
    }
    // 遍歷所有的key和value
    hm.forEach((key,value)=>{
      console.info('gxxt  '+key+'=='+value)
    },key=>JSON.stringify(key))
    // 替換元素
    hm.replace(1,'item11')
    // 刪除元素
    hm.remove('one')
  }

TreeMap

TreeMap可用來儲存具有關聯關係的key-value鍵值對集合,儲存元素中key是唯一的,每個key會對應一個value值。

TreeMap和HashMap相比,HashMap依據鍵的hashCode存取資料,訪問速度較快。而TreeMap是有序存取,效率較低。

// treemap
export function treemap() {
  let tm = new TreeMap()
  tm.set('one', 'item1')
  tm.set(2, 'item2')
  tm.set(3, 'item3')
  //  treemap是有序的 所以可以
  let fk = tm.getFirstKey()
  let lk = tm.getLastKey()
  console.info('gxxt  ' + fk + '  ' + lk)

}

HashSet

HashSet可用來儲存一系列值的集合,儲存元素中value是唯一的。

export function hashset()
{
  let hs=new HashSet()
  // 增加元素
  hs.add('item1')
  hs.add('item2')
  hs.add('item3')
  // 獲取集合中元素
  let vs=hs.values()
  for (const element of vs) {
    console.info('gxxt '+element)
  }
  hs.forEach((value)=>{
    console.info('gxxt '+value)
  },value=>JSON.stringify(value))
//   刪除元素
  hs.remove('item2')
}

TreeSet

TreeSet可用來儲存一系列值的集合,儲存元素中value是唯一的。

TreeSet和HashSet相比,HashSet中的資料無序存放,而TreeSet是有序存放。它們集合中的元素都不允許重複,但HashSet允許放入null值,TreeSet不建議插入空值,可能會影響排序結果。

// treeset
export function treeset()
{
  let ts=new TreeSet()
  ts.add('item1')
  ts.add('item2')
  ts.add('item3')
  // 獲取第一個元素
  let fv=ts.getFirstValue()
  // 獲取最後一個元素
  let lv=ts.getLastValue()
  console.info('gxxt '+fv+'=='+lv)
}

相關文章