**仅用于复习,参考自己的笔记和其他博客(见原博地址)
-
interface(接口)&abstract class(抽象类)
abstract class强调对象是什么,interface强调实现接口的对象能做什么。如卡车、汽车等,都是对车的抽象,所以可以把车定义为一个抽象类;人吃东西、动物吃东西,所以可以把吃东西定义成一个接口,让人和动物去实现。
总结:类相似用abstract class,类不同用interface;访问除public的用abstract class,只访问public用interface;希望指定行为,但不关心谁来实现(implement)用interface。
相同点:interface和abstract class都不能被实例化。
不同点(abstract class):可申明变量,public/protected/private。
不同点(interface):所有字段都是自动public, static, final。 -
Public, protected, private
protected: 可以被同package的访问
private:子类不能访问父类的私有成员 -
HashTable(散列表、哈希表)
综合了数组array(查找容易,插入删除困难)和链表LinkedList(查找困难,插入删除容易)的特点。
优点:查找、插入、删除效率高,O(1)。
缺点:因为基于数组,所以难扩建,当table被填满后,性能会下降。
借鉴内容参考博客原址:第8章查找——哈希表(散列表)原理详解(大话数据结构) -
Garbage Collection(垃圾回收)
垃圾回收方案用来提供固态硬盘的写入性能;垃圾回收主要将不必要存在且浪费空间的块回收,来增加可用的块数。
三个任务:根据算法从脏队列中选出需要擦除的块;将此块的有效内容搬到另一个块;擦除前一个块。
参考博客原址:Garbage Collection -
Binary Search Tree(二分查找树)
特点:left<node<right,结合了数组array(查找容易,插入删除困难)和链表LinkedList(查找困难,插入删除容易)的优点。
在Java中要实现Comparable接口!
参考博客原址:数据结构-二分搜索树(Binary Search Tree) -
parallelization&memorization
parallelization:平行处理,几个任务可以同时进行
memorization:存储函数调用的结果;没必要重复已经做过的工作 -
Heap
特点:完全二叉树,堆中某个节点的值总是不大于或不小于父节点的值。
码:操作、Heaps&Trees、Heaps&Stacks、BubbleUp、BubbleDown
参考博客原址:heap(max-heap最大堆、min-heap最小堆)
参考博客原址:堆 -
HashMap&HashTable
HashMap:允许一个null key和多个null vals;只包含唯一元素;无序
HashTable:array;唯一元素;不允许有null key/null vals;需要使用HashCode -
Graph(图)
G = (V, E)
V: a set of vertices
E: a set of edges
图由节点(node)和边(edge)组成,一个节点可能与众多节点直接相连,这些节点被称为“邻居”。
边(edges):由一对(v, w)构成,v和w在V里。
度(degree):依附于顶点的的边的数目
出度:以任意一顶点为起点的弧的数目称为该顶点的出度
入度:以任意一顶点为终点的弧的数目称为该顶点的入度
顶点(vertex):代表一个实体
路径(path):从顶点a到顶点b的边,path是edge的序列
邻居(neighbor/adjacency):若两个顶点同边
回路(cycle):一个起点终点在同一个节点的路径(一个环)
弧头:弧的终端点
弧尾:弧的初始点
loop:给自己的圈套(an edge directly form a node itself)
权(weight):边的cost,或图的边/弧具有与它相关的数
弧:有向图中连接顶点的称作弧
连通:在无向图中,如果从顶点a到顶点b有路径,则称a和b是连通的
完全图:在无向图中有n/2(n-1)条边的无向图称为完全图,或所有边都顶点都连上了
有向完全图:具有n(n-1)条弧的有向完全图称为有向完全图,或所有顶点啥都连上了
稀疏图:有很少条边或弧的图
稠密图:与稀疏图相反
无圈图(acyclic graph):没有任何回路(没环)
网: 每个边或弧都附加一个权值的图,称为带权图。而带权的连通图称为网
网络:带权的连通图称为网络
连通图(connected):至少有一条路径连接起所有顶点or相通
强连通图(strongly connected):所有顶点有到所有点的路径
有向图(directed graph):有指明方向
带权图(weighted graph):边被赋予一个权值,权值是一个数字,能代表物理距离、时间、或费用
参考博客原址:数据结构 图(一) -
Breadth-first search(广度优先搜索)
搜索范围从起点开始逐渐向外延伸,即先检查一度关系,再检查二度关系。
将两个顶点之间的路径按下所有路径一步。探索所有的邻居,然后邻居的邻居…(通常通过维护要访问的顶点队列来实现)
特点:
在unweighted graph里,保证返回最短距离;在weighted graph里不会总得到最佳成本
很难找到路径(因为BFS正在并行地探索许多路径,因此存储路径并不容易)
DFS比BFS使用更少内存,并更容易重构路径,但DFS不一定总能找到最短路径
跟踪邻居