- 进程(process) 实现并发编程的基本途径
线程(thread)
2.main(String[] args) 这个东西,叫做"命令行参数"
(1)以前的时候操作系统都是使用命令行的方式操作的.
命令行, 咱们现在也会经常用到,尤其是操作Linux服务器的时候.Linux没有图形界面嘛?有的
服务器是在遥远的机房.如果通过图形界面操作服务器,就需要把服务器上的画面,以一帧一帧的图像的形式通过网络传输过来.一帧图片就几个MB,命令行的话,只需要传输一些简单的字符,几个K
(2) 什么是命令行的参数?
如: java Test1 365 156 “China”
(以上Test1必须为主类,否则不能运行)
(3)命令行参数可以有很多个
数据结构(1)
1.数据结构是啥?
组织大量的数据
把数据按照一定的规则放到一起整理好,方便后续进行使用(高效)(增删改查)
2.数据结构中的内容有啥?
(1)线性表
顺序表 ArrayList / Vector
链表 LinkedList
(2)栈和队列
栈 Stack
队列 Queue
(3)树
普通的树 (意义不大)
二叉树
堆 优先队列 PriorityQueue
二叉搜索树 TreeSet / TreeMap
B树/B+树 数据库中会涉及
(4)哈希表 HashSet/HashMap
(5)图 - 为什么要学数据结构?
以后写程序,稍微有些实用价值的程序,都离不开数据结构.
一种过去的比较极端的观点: 软件 = 数据结构+(广义)算法
元素(Element): 被管理的原子数据,元素类型不限。
集合(Collection): 存放元素的容器,需要利用一定的数据结构知识对元素进行组织。
遍历(Traversal) /迭代(lterate): 在数据结构的语境下,往往表示对一个集合中的所有元素都按照一定的顺序处理(访问(visit)针对这个元素进行操作(读取,修改,打印…….))一次。
淡黄色表示接口interface
蓝色表示抽象类abstract class
深黄色表示类 class
向上的箭头表示“继承”或者“实现”
5.时间复杂度、空间复杂度
衡量程序效率的一种方式.
时间复杂度,衡量的是程序运行的快慢
空间复杂度,衡量的是程序占用内存/外存的大小
时间复杂度抛开外部的干扰因素,单纯从代码本身来衡量程序的运行效率,大概得到一个粗略的值,并不精确
学习研究数据结构的时候,也经常需要衡量某种数据结构的某个操作的运行快慢,不太适合直接使用时间这样的概念来衡量.
6.问题规模N
同样的一段代码,要处理的问题规模大或者小,可能就会影响到程序的运行速度.
例如之前学过的二分查找和普通查找
7.执行次数,不是精确的衡量,而是使用大O渐进表示法.
衡量时间复杂度的时候,需要先确定基本操作是啥,执行次数最多的典型操作,可能是++,也可能是赋值,也可能是读取,也可能是打印.……
计算基本操作执行的次数.保留最高阶项,同时去掉系数.得到了一个用来衡量复杂度的“近似值"
(1)理解O(1)常量复杂度,不是说基本操作只进行一次,可以是多次,但是当前基本操作的次数和问题规模N无关.
(2)O(N^2)
为啥能省略掉低阶项:
如果N变大了,最终的基本操作的执行次数也会变大很多.
在这整个表达式中,对表达式最终值的影响最大的就是最高阶的项.
N 10000
N^2=>100000000
2 N=>20000
10 =>10
远远小于,忽略不计
(3)像查找元素这个事情
可能要查找的元素,就是处在数组的第一个位置,比较一次就找到了.
可能要查找的元素,处在数组的中间位置,可能需要比较个N/2次才能找到.
还可能要查找的元素处在数组的末尾,可能需要比较N次才能找到
问题规模,不一定用一个变量就能描述,可能是多个变量,这个时候时间复杂度的表示,也就需要多个变量来描述了.