!数据结构学习
util包 已经实现,不需要自己实现,实际上是很复杂的
linkedlist双向链表
有序链表好像没有实现
treeset treemap 树(红黑树)
linkedhashmap保证插入或访问顺序的哈希表,链表哈希双重结构(下文有用)
要对map键排序 使用treemap,要对map值排序,使用.entryset().stream().sorted然后collect tomap 注意 指定顺序,collecttors. tomap第四个参数 为linkedhashmap::new 相当于()->new linkedhashmap(),第三个参数处理冲突(a,b)->b
排序 arrays.sort collects.sort 注意 自定义排序方式 如 字符串逆序加个减号即可(a,b)->-a.compareto(b),个性化的排序可以减少很多代码
priorityqueue 优先级队列,并不是 有序链表,构造方法 需要有元素的排序函数 一般用反序(a,b)->-a.compareto(b),他是用堆来实现的,堆 类似于树,但是顺序是弱的,保证顶上的是最小的,每条路径 是有序的,所以只有poll 操作是有序的,遍历是无序的
——
数组排序 两类,有代表性的分别是 1.简单排序 选择排序 每次选择一个最小的放在左边 复雜度o(n^2) 2.高级排序 快速排序 根据 最右边的元素 分成左中右三块,最右边的元素为中,表示已经有序,小的在左,大的在右,然后递归对左和右分别执行这个过程 复雜度o(n log n)
栈stack
队列queue、deque
链表(linkedlist双向链表也是队列queue、deque的实现,想反向访问,调用descendingiterator获取指针然后next)
递归 降级思想 问题 不确定的数量的排列组合问题进行穷举 可以用这种方法
二叉树 就是为了结合数组 链表的优点而出现的,数组查询快(可以跳),链表插入快,二叉树 结合了他们的优点 避免了他们的缺点,查询o( log n),树都是有序的,这样才能快速查找,每次插入也是需要找到对应的位置才能正确插入,二叉树有个缺点,如果插入的是有序的数,就会降级成链表,平衡树才能避免这个缺点,另外就是,每个节点是包含子节点的引用,这样才能快速的查找,而不是每个节点包含父节点的引用,因为这样就要全部遍历了,经不再是树了,遍历树,常见的有左中右,中左右,还有一种左右中
红黑树 是一种平衡树
哈希表 是最快速访问的方法,可以不用搜索 直接到达特定的内存,查询o(1), 方法就是放在数组中,但是根据key就可以计算出数组中的位置,为了防止 多个key具有相同的哈希码,两种方法,一个是每个位置 可以放多个,一个是让空间大一倍,留下许多空位,冲突的时候放在其他空位置
b树 b+树 b树,三者是父子关系, b就是 平衡的意思,翻译有问题 有些地方b树翻译成b-树,b树 可以是多叉树,也就是一个节点 下边有很多个子节点,每个节点也都可以存放多个数据,常见的有2-3树,2-3-4树,b+树只有叶节点存放数据(文件系统 使用b+树), b树 是b+树子类,节点包含着兄弟节点的引用
数据结构学习
最新推荐文章于 2023-08-21 14:23:58 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)