线性结构
动态数组:可以扩容,连续存储( ArrayList)
链表:不连续存储,有当前节点,才能找到相邻节点(linkedlist)
栈:先进后出,常用方法pop(出栈) push(入栈)peek(栈顶获取)linkedlist
队列:先进先出, linkedlist实现的是双端队列,常用方法:addfirst,addlast,标准队列off队尾添加。poll队头移除
非线性结构:
优先级队列: 保证优先级高的先出队,实现方式小顶堆(优先级小的都是根节点),或者大顶堆(优先级高的都是根节点)适合流式数据的处理(流式数据:无结束点,持续性)
hash表 key-value结构,根据key生成hash码存储数据value,适合数据的快速查找,实现有 HashMap(初始链表+数组,链表长度大于8数组长度大于64转化为红黑树,单线程首选),Hashtable(线程安全,效率低下)
红黑树:自平衡的二叉查找树,相对线性结构性能较好, TreeMap 属于红黑树
跳表:多级链表结构,链表上有多层索引,层级随机,比红黑树实现简单,性能差不多 。java 中的 ConcurrentSkipListMap 用跳表结构实现,redis 中的 SortedSet 也是用跳表实现
B+ 树:可以自平衡的 N 叉查找树。关系型数据库的索引常用 B+ 树实现