第1周学习

这周主要学习了Java的知识,日期Calendar,Instant,ZoneDataTime,LocalTIme LocalDate LocalDateTime,计算时间的Duration Period ChronoUnit类
首次接触数据库MySQL,

Calendar

import java.util.Calendar;
import java.util.Date;

public class Test1 {
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();
        Date d = new Date();
        c.setTime(d);

        c.set(Calendar.YEAR,2018);
        c.add(Calendar.MONTH,1);
        int year = c.get(Calendar.YEAR);     //c实际上是个数组,等价c.get(1);
        int month = c.get(Calendar.MONTH) + 1;  //0 - 11 所以获取月份要加1
        int day = c.get(Calendar.DATE);
        int week = c.get(Calendar.WEEK_OF_MONTH);
        System.out.println(year + "-" + month + "-" + day + "-" + getWeek(week));

    }
    //查表法
    public static String getWeek(int index){
        String[] week = {"日","一","二","三","四","五","六"};
        return "星期" + week[index - 1];
    }
}

时区时间和格式化

ZoneId

import java.time.ZoneId;
import java.util.Set;

public class ZoneId_Test1 {
    public static void main(String[] args) {
        Set<String> s = ZoneId.getAvailableZoneIds();       //获取所有时区的集合'
        System.out.println(s);

        ZoneId z1 = ZoneId.systemDefault();     //获取系统当前时区
        System.out.println(z1);

        ZoneId z2 = ZoneId.of("America/El_Salvador");   //指定时区
        System.out.println(z2);
    }
}

Instant时间戳

import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;

public class Instant_Test2 {
    public static void main(String[] args) {
        Instant i = Instant.now();
        System.out.println(i);

        Instant i2 = Instant.ofEpochSecond(2L);
        System.out.println(i2);

        Instant i3 = Instant.ofEpochMilli(30000L);
        System.out.println(i3);

         ZonedDateTime zd = Instant.now().atZone(ZoneId.of("America/El_Salvador"));
        System.out.println(zd);

        System.out.println(i.isAfter(i2));
        System.out.println(i2.isBefore(i));

        System.out.println(i2.minusSeconds(1L));    //时间减1秒
        System.out.println(i2.plusSeconds(1L));    //时间减1秒

    }
}

ZoneDateTime

import java.time.ZoneId;
import java.time.ZonedDateTime;

public class ZonedDateTime_Test {
    public static void main(String[] args) {
        ZonedDateTime zd = ZonedDateTime.now();
        System.out.println(zd);

        ZonedDateTime zd2 = ZonedDateTime.of(2003,12,1,10,50,0,0, ZoneId.of("Asia/Shanghai"));
        System.out.println(zd2);

        System.out.println(zd2.withHour(8));    //修改小时
        System.out.println(zd2.minusHours(2));  //修改小时
        System.out.println(zd2.plusDays(1));    //修改天
        //修改,增加每减少都会新建一个新的对象
    }
}

DateTimeFormatter

import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

public class DateTimeFormatter_Test {
    public static void main(String[] args) {
        ZonedDateTime zdf = Instant.now().atZone(ZoneId.of("Asia/Shanghai"));

        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH-mm-ss");
        System.out.println(dtf.format(zdf));
    }
}

LocalTIme LocalDate LocalDateTime


LocalDateTime 转换为 LocalTime 和 LocalDate

import java.time.LocalDate;
import java.time.LocalDateTime;

public class LocalDateTime_Test {
    public static void main(String[] args) {
        LocalDateTime ldt = LocalDateTime.now();
        System.out.println(ldt);

        System.out.println(ldt.getYear());
        System.out.println(ldt.getMonthValue());
        System.out.println(ldt.getDayOfMonth());

        LocalDate ld = ldt.toLocalDate();
        System.out.println(ld);

        System.out.println(ldt.toLocalTime());

    }
}

Duration Period ChronoUnit

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;

public class ChronoUnit_Test {
    public static void main(String[] args) {
        LocalDateTime today = LocalDateTime.now();
        System.out.println(today);

        LocalDateTime birthday = LocalDateTime.of(2024,8,20,0,0,0);
        System.out.println(ChronoUnit.YEARS.between(birthday,today));
        System.out.println(ChronoUnit.MONTHS.between(today,birthday));
        System.out.println(ChronoUnit.DAYS.between(today,birthday));
        System.out.println(ChronoUnit.SECONDS.between(today,birthday));
    }
}

包装类

Integer

public class Integer_Test {
    public static void main(String[] args) {
        Integer i1 = new Integer(5);
        System.out.println(i1);

        Integer i2 = Integer.valueOf(10);
        System.out.println(i2);
    }
}

包装类:用一个对象,把一个基本数据类型包装起来(基本数据类型对应的引用类型)
在JDK5的时候提出了一个机制,自动装箱和自动拆箱
自动装箱:把基本数据类型自动变成其对应的包装类
自动拆箱:把包装类自动变成其对对象的基本数据类型
所以在JDK5以后,int和Integer可以看做同一个东西,因为在内部可以自动转换

Integer的成员方法


System.out.println(Integer.toBinaryString(i2));
System.out.println(Integer.parseInt("45555"));


sc.nextLine() //遇到回车停止

import java.util.Scanner;

public class Integer_Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String line = sc.nextLine();

        //在8种包装类中,除了Character都有其对应的parseXXX转换方法,进行类型转化
        double d = Double.parseDouble(line);  
        System.out.println(d);
    }
}

实现Integer.parseInt()函数

import java.util.Scanner;

public class Test3 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String num = sc.nextLine();
        String regex = "[1-9][0-9]{0,9}";
        if(num.matches(regex)){
            int number = 0;
            for(int i = 0; i < num.length(); i++){
                number = number * 10 + (num.charAt(i) - '0');
            }
            System.out.println(number);
        }
        else System.out.println("格式错误");
    }
}

十进制转换为二进制字符串

public class Test4 {
    public static void main(String[] args) {
        int number = 123;
        System.out.println(toBinaryString(number));
    }

    public static String toBinaryString(int number){
        StringBuilder sb  = new StringBuilder();
        while(number != 0){
            sb.append(number%2);
            number /= 2;
        }
        return sb.reverse().toString();
    }

}

计算活了多少天(时间计算)

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.Date;

public class Test5 {
    public static void main(String[] args) throws ParseException {
        //JDK7
        String birthday = "2005-08-20";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date birthdayTime = sdf.parse(birthday);
        long today = System.currentTimeMillis();
        System.out.println((today - birthdayTime.getTime())/1000/60/60/24);

        //JDK8
        LocalDate birthday2 = LocalDate.of(2005,8,20);
        LocalDate today2 = LocalDate.now();
        System.out.println(ChronoUnit.DAYS.between(birthday2,today2));
     }
}

判断是否为闰年

import java.text.ParseException;
import java.time.LocalDate;

public class Test5 {
    public static void main(String[] args) throws ParseException {
        //JDK8
        LocalDate birthday2 = LocalDate.of(2005,8,20);
        System.out.println(birthday2.isLeapYear());
     }
}

二分查找

public class BinarySearch_Test {
    public static void main(String[] args) {
        int[] arr = {1,5,8,6,12,56,66,78,88};
        System.out.println(binarySearch(arr, 1));
    }
    public static int binarySearch(int[] arr,int number){
        int min = 0, max = arr.length,mid = 0;
        while(min <= max){
            mid = (min + max)/2;
            if(arr[mid] > number) max = mid - 1;
            else if(arr[mid] < number) min = mid + 1;
            else return mid;
        }
        return -1;
    }

}

二分查找升级版(插值查找)

//插值查找
    public static int interpolationSearch(int[] arr ,int number){
        int min = 0, max = arr.length - 1,mid = 0;
        while(min <= max){
            mid = (min + max)/2;
            if(arr[mid] > number){
                max = mid - (arr[max] - number)/arr[max] - arr[min] * (max - min);
            }
            else if(arr[mid] < number){
                min = mid + (number - arr[min])/(arr[max] - arr[min])  * (max - min);
            }
            else return mid;
        }
        return -1;
    }

分块查找

class Block{
    private int max;
    private int start;
    private int end;

    public Block() {
    }

    public Block(int max, int start, int end) {
        this.max = max;
        this.start = start;
        this.end = end;
    }

    /**
     * 获取
     * @return max
     */
    public int getMax() {
        return max;
    }

    /**
     * 设置
     * @param max
     */
    public void setMax(int max) {
        this.max = max;
    }

    /**
     * 获取
     * @return start
     */
    public int getStart() {
        return start;
    }

    /**
     * 设置
     * @param start
     */
    public void setStart(int start) {
        this.start = start;
    }

    /**
     * 获取
     * @return end
     */
    public int getEnd() {
        return end;
    }

    /**
     * 设置
     * @param end
     */
    public void setEnd(int end) {
        this.end = end;
    }

    public String toString() {
        return "Block{max = " + max + ", start = " + start + ", end = " + end + "}";
    }
}

public class blockSearch_Test {
    public static void main(String[] args) {
        int[] arr = {16,5,9,12, 21,18,
                32,23,37,26,45,34,
                50,48,61,52,73,66};
        Block b1 = new Block(21,0,5);
        Block b2 = new Block(45,6,11);
        Block b3 = new Block(73,12,17);
        Block[] blockArr = {b1,b2,b3};

        int number = 45;
        System.out.println(findIndex(arr,blockArr,number));


    }

    public static int findBlock(Block[] blockArr,int number){
        for(int i = 0; i < blockArr.length; i++){
            if(blockArr[i].getMax() >= number)return i;
        }
        return -1;
    }

    public static int findIndex(int[] arr,Block[] blockArr,int number){
        int site = findBlock(blockArr,number);
        for(int i = blockArr[site].getStart(); i <=blockArr[site].getEnd(); i++){
            if(number == arr[i])return i;
        }
        return -1;
    }

}

插值排序

public class insertSort_Test {
    public static void main(String[] args) {
        int[] arr = {1,8,6,4,2,9,7,0,5,3,4};

        int startIndex = -1;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] > arr[i+1]){
                startIndex = i + 1;
                break;
            }
        }
        //System.out.println(startIndex);
        for(int i = startIndex; i < arr.length; i++){
            int j = i;
            while(j > 0 && arr[j] < arr[j-1]){
                int temp = arr[j];
                arr[j] = arr[j-1];
                arr[j-1] = temp;
                j--;
            }
        }

        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

快速排序

    public static void quickSort(int[] arr,int i,int j) {
        int start = i, end = j;
        if(start > end) return;
        int baseNumber = arr[i];
        while (start != end) {
            while (true) {
                if (start == end || arr[end] < baseNumber) {
                    break;
                }
                end--;
            }

            while (true) {
                if (start == end || arr[start] > baseNumber) {
                    break;
                }
                start++;
            }
            int t = arr[end];
            arr[end] = arr[start];
            arr[start] = t;
        }
        int t = arr[start];
        arr[start] = arr[i];
        arr[i] = t;
        quickSort(arr, i, start - 1);
        quickSort(arr, start + 1, j);
    }
}

Arrays

import java.util.Arrays;
import java.util.Comparator;

public class Arrays_Test {
    public static void main(String[] args) {
        int[] arr = {5,4,1,2,3};

        System.out.println(Arrays.binarySearch(arr,1));

        //Arrays.fill(arr,5);
        //F(arr);

        System.out.println(Arrays.toString(arr));
        int[] arr2 = Arrays.copyOf(arr,6);
        F(arr2);

        int[] arr3 = Arrays.copyOfRange(arr,2,4);   //包头不包尾
        F(arr3);

        Arrays.sort(arr);
        F(arr);
        Integer[] arr4 = {5,4,1,2,3};
        Arrays.sort(arr4, new Comparator<Integer>() {    //匿名内部类
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;
            }
        });
        for (int i = 0; i < arr4.length; i++) {
            System.out.print(arr4[i] + " ");
        }
    }
    public static void F(int[] arr){
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
    }
}

Lambda表达式

函数式编程

函数式编程是一种思想特点,面向对象:先找对象,让对象做事情

  • Lambda表达式可以用来简化匿名类的书写
  • Lambda表达式只能简化函数式接口的匿名内部类的写法
  • 函数式接口: 有且仅有一个抽象方法的接口叫做函数式接口,接口上方可以加@FunctionalInterface注释
public class Lambda_Test{
    public static void main(String[] args) {

        //1.利用匿名内部类实现
        method(new Swim(){
            @Override
            public void swimming() {
                System.out.println("游泳--");
            }
        });
        
        //2.使用lambda表达式
        method(()->{
            System.out.println("游泳??");
        });
    }

    public static void method(Swim s){
        s.swimming();
    }

}

interface Swim{
public abstract void swimming();
}
import java.util.Arrays;

public class Lambda_Test{
    public static void main(String[] args) {
        String[] arr = {"a","aaaa","aaa","aa"};
        //lambda表达式
        Arrays.sort(arr,(o1,o2)->{return o1.length() - o2.length();});
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }

    }
}

集合体系结构


List系列结合:添加的元素是有序,可重复,有索引
Set系列集合:添加的元素是无序,不重复,无索引

Collection

public boolean add (E e) 添加
public void clear() 清空
public boolean remove (E e) 删除
public boolean contains(Object obj) 判断是否包含
public boolean isEmpty() 判断是否为空
public int size() 集合长度
contains方法,底层是依赖equals方法进行判断是否存在的
所以,如果集合中存储的是自定义对象,也想通过contains方法来判断是否包含,那么在javabean类中,一定要重写equals方法

Collection的遍历方式

迭代器遍历

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Collection_Test {
    public static void main(String[] args) {
        Collection<String> coll = new ArrayList<String>();
        coll.add("aaa");
        coll.add("bbb");
        coll.add("ccc");
        coll.add("ddd");
        
        //迭代器遍历容器
        Iterator<String> it = coll.iterator();
        while(it.hasNext()) System.out.println(it.next());

    }
}

迭代器遍历完毕,指针不会复位.
迭代器的细节注意点:

  1. 报错NoSuchElementException
  2. 迭代器遍历完毕,指针不会复位
  3. 循环中只能用一次next方法
  4. 迭代器遍历时,不能用集合的方法进行增加和删除,如果要删除,可以用迭代器提供的remove方法删除

增强for遍历

  • 增强for的底层就是迭代器,为了简化迭代器的代码书写的
  • 它是JDK5之后出现的,其内部原理就是一个Iterator迭代器
  • 所有的单列集合和数组才能用增强for进行遍历
import java.util.ArrayList;
import java.util.Collection;

public class a02for_Test {
    public static void main(String[] args) {
        Collection<Integer> coll = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            coll.add(i);
        }
        //增强for循环
        for(int i : coll){
            System.out.println(i);
        }
    }
}

lambda表达式遍历


import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Consumer;

public class a03Lambda_Test {
    public static void main(String[] args) {
        Collection<String> coll = new ArrayList<>();
        coll.add("aaa");
        coll.add("bbb");
        coll.add("ccc");

        //匿名内部类
        coll.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });
        //lambda表达式遍历
        coll.forEach( s -> System.out.println(s));
    }
}

MySQL知识点

数据库相关概念

数据库:存储数据的仓库,数据是有组织的进行存储 DataBase(DB)
数据库管理系统:操控和管理数据库的大型软件 DataBase Management System(DBMS)
SQL: 操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准 Structured Query Language(SQL)

主流的关系型数据库管理系统

Oracle,MySQL,SQL Server
SQL是统一标准
启动mysql两种方式

  1. win + r 输入services.msc
  2. 管理员模式 在命令行输入 net start mysql80 / ner stop mysql80
    连接mysql的两种方式
    方式一:打开MySQL 8.0 Command Line Cliend
    方式二:命令方式 mysql -u root -p

SQL

SQL通用语法

SQL分类

  • DDL (Data Definition Language)
  • DML (Data Manipulation Language)
  • DQL (Data Query Language)
  • DCL (Data Control Language)

DDL数据库操作

查询 : show databases;
查询当前数据库: select database();
创建: creat databases [if not exists] 数据库名 [default charset 字符集] [collate 排序规则];
删除:drop databases[if exists]数据库名;
使用:use 数据库名;

DDL-表操作-查询

  • 查询当前数据库所有表 show tables;
  • 查询表结构 desc 表名;
  • 查询指定表的建表语句 show create table 表名;

DDL-表操作-创建

mysql> create table tb_user(
    -> id int comment '编号',
    -> name varchar(50) comment '姓名',
    -> age int comment '年龄',
    -> gendar varchar(1) comment '性别'
    -> ) comment '用户表';

DDL-表操作-数据类型

DDL-表结构-修改

添加字段 alter table 表名 ADD字段名 类型(长度)[COMMENT 注释]][约束];
修改数据类型alter table 表名 modify 字段名 新数据类型(长度);
修改字段名和字段类型alter table 表名 change 旧的字段名 新字段名 类型(长度) [comment 注释][约束];
删除字段alter table 表名 drop 字段名;
修改表名alter table 表名 rename to 新表名;
删除表drop table [if exists]表名;
删除指定表,并重新创建该表truncate table 表名;

posted @ 2024-09-08 16:14  XYu1230  阅读(6)  评论(0编辑  收藏  举报