【高心星出品】
容器类
线性容器类
线性容器实现能按顺序访问的数据结构,其底层主要通过数组实现,包括 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 是有序存取,效率较低。
// treemapexport 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 不建议插入空值,可能会影响排序结果。
// treesetexport 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)}
复制代码
评论