1.练习
自己实现单向链表
1.1 定义单向链表
public class MySinglyLinkedList<E> {
/**
* 定义单向链表中的节点对象
*/
class Node<E> {
private E item;
private Node next;
Node(E item,Node next){
this.item = item;
this.next = next;
}
}
/**
* 存放链表中的头节点
*/
private Node head;
/**
* 记录元素个数
*/
private int size;
}
1.2 向链表中添加元素
public void add(E element) {
Node<E> node = new Node<>(element,null);
//找尾节点
Node tail = getTail();
//
if(tail == null){
this.head = node;
}else {
tail.next = node;
}
//记录元素个数
size++;
}
1.3 根据索引删除元素
public E remove(int index) {
//校验Index的合法性
this.checkIndex(index);
//根据位置找到该节点对象
Node<E> node = this.getNode(index);
//获取该节点对象中的元素
E item = node.item;
//将该节点对象从单向链表中移除
//判断当前删除的节点是否为头节点
if(this.head == node){
this.head = node.next;
}else {
Node<E> temp = this.head;
for (int i = 0; i < index-1; i++) {
temp = temp.next;
}
temp.next = node.next;
}
node.next = null;
//
this.size--;
return item;
}
1.4 根据元素位置获取元素
public E remove(int index) {
//校验Index的合法性
this.checkIndex(index);
//根据位置找到该节点对象
Node<E> node = this.getNode(index);
//获取该节点对象中的元素
E item = node.item;
//将该节点对象从单向链表中移除
//判断当前删除的节点是否为头节点
if(this.head == node){
this.head = node.next;
}else {
Node<E> temp = this.head;
for (int i = 0; i < index-1; i++) {
temp = temp.next;
}
temp.next = node.next;
}
node.next = null;
//
this.size--;
return item;
}
1.5 获取元素个数
public int size() {
return this.size;
}
1.6 找尾节点
private Node getTail(){
//头节点是否存在
if(this.head == null){
return null;
}
//查找尾节点
Node node = this.head;
while(true){
if(node.next==null){
break;
}
//移动指针,指向下一个节点
node = node.next;
}
return node;
}
1.7 校验Index
private void checkIndex(int index){
if(!(index>=0 && index < this.size)){
throw new IndexOutOfBoundsException("Index:"+index+"Size:"+this.size);
}
}
2. 数据库简介
2.1 数据库概述
2.2 数据库分类
早期比较流行的数据可模型有三种,分别为层次式数据库,网络式数据库、关系型数据库、非关系型数据库(前两者基本已经消失)。
现在最常用的数据库模型主要是两种:关系型数据库 和 非关系型数据库。
关系模型:
用二维表的形式表示实体和实体间的联系的模型,是现如今数据库领域中应用最广泛的数据模型,简单、清晰。
类:
由属性和方法,对应于一个具体的数据表。
对象:
根据类创建的一个实体,对应数据表中的一条记录。
2.3 数据库与程序的关系
2.3.1 数据库基本概念
实体与属性(程序概念)
实体是客观存在并可以相互区别的事物;
属性是事物本身固有的性质。
记录和字段(数据库中的概念)
数据表:二维表格的形式存储数据;
行:记录,一条数据,对应实体对象;
列:字段,属性
关系型数据库:关系型数据库以行和列的形式存储数据,列是固定的,行是可以动态添加,这种形式称之为关系;这一系列的行和列被称为表,一组表组成了数据库;数据库就是数据表、数据库关系和数据库关系对象的集合。
常见的关系型数据库:MySQL,Oracle,SqlServer(服务器),sql语言(structed query language 结构化查询语言)
非关系型数据库:非关系型数据库也被称为NoSQL数据库,大Map key:value 索引。NoSQL的本意是“Not Only SQL”,指的是非关系型数据库,而不是“No SQL”的意思(没有SQL语句?),因此,NoSQL的产生并不是要彻底否定关系型数据库,而是作为传统关系型数据库的一个有效补充;NoSQL数据库在特定的场景下可以发挥出难以想象的高效率和高性能。常见非关系型数据库:Redis MongoDB hbase redis 缓存
2.3.1 数据库术语
数据库管理系统:DBMS:DataBase Management System(数据库+管理数据库的软件):MySQL,Oracle,SqlServe
数据库系统:DBS;基于数据库进行读写的软件系统
数据库管理员:DBA:保证数据库系统的正常运行,安全,备份,恢复,日常问题的解决;数据库运维人员:测试,产品。
3. MySql使用
3.1 MySql简介
3.2 MySql优点
开源:MySQL源代码免费下载;
简单:体积小,便于安装;
性能优越:性能足够与商业数据库媲美。
3.3 MySql的访问
(MySql 8.0)
打开命令框(以管理员身份打开,不然会报错)
3.3.1 mysql服务
①启动mysql:
输入:net start mysql服务名(安装的时候没有修改就是默认的)
②停止mysql:
输入:net stop mysql服务名
3.3.2 在cmd命令行中连接mysql服务器
cmd命令框中输入:
mysql -hlocalhost -u用户名 -p密码
如:
mysql -uroot -p******
3.3.3 基于客户端工具连接MySql
Navicat 连接:
3.3 创建用户和授权
3.3.1 创建用户
create user '用户名'@'主机地址' identified by '密码'
create user 'myuser'@'localhost' identified by '123456'
3.3.2 授权
grant 权限种类 on 数据库名.表名 to '用户名'@'主机地址' with grant option;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
flush privileges;//修改后执行此句命令,刷新权限。
说明:
GRANT:赋权命令
ALL PRIVILEGES:当前用户的所有权限
ON:介词
. :当前用户对所有数据库和表的相应操作权限
TO:介词
‘root’@’%’:权限赋给root用户,所有ip都能连接
IDENTIFIED BY ‘123456’:连接时输入密码,密码为123456
WITH GRANT OPTION:允许级联赋权
3.4 数据库的操作
常用操作:
show databases;显示当前连接下的所有数据库
use 数据库名; 使用数据库
show tables; 显示该数据库下的所有表
desc 表名; 显示表结构
#查看表结构
desc goods
#查询表信息
select * feom book;
#查看建表代码
show create TABLE goods