一、java基础

1.1 java关键字

image.png

1.2 标识符

image.png

二、数据类型(八大基本数据类型)

image.png

2.1 什么是字节

image.png

  1. package day1;
  2. public class demo1 {
  3. public static void main(String[] args) {
  4. // 八大基本数据类型
  5. int age =22;
  6. long ll = 222232323232L;
  7. short sht ='a';
  8. // String name= "阿飞";
  9. float scope = 22.2F;
  10. double saly = 22.1;
  11. boolean isTrue = true;
  12. char chs = 'A';
  13. byte b = 123;
  14. }
  15. }

2.2 类型转换

image.png

2.3 变量

image.png
image.png

2.4 常量

image.png

三、 基本运算符

image.png

image.png

六、流程控制

6.1 scanner对象

image.png
image.png

  1. package day1;
  2. import java.util.Scanner;
  3. public class ScannerTest {
  4. public static void main(String[] args) {
  5. //获取用户键盘的输入
  6. Scanner scanner = new Scanner(System.in);
  7. // 拿到用户输入的数据
  8. String str =scanner.nextLine();
  9. System.out.println(str);
  10. // 关闭输入流
  11. scanner.close();
  12. }
  13. }

6.2 scanner进阶(计算数字之和)

  1. package day1;
  2. import java.util.Scanner;
  3. public class ScannerT {
  4. public static void main(String[] args) {
  5. Scanner scanner = new Scanner(System.in);
  6. int sum = 0;
  7. int num = 0;
  8. // 计算树数字之和
  9. // 判断用户是不是数字,如果不是返回结果
  10. while (scanner.hasNextInt()){
  11. int userin = scanner.nextInt();
  12. num+=userin;
  13. sum++;
  14. }
  15. System.out.println(sum);
  16. System.out.println(num);
  17. }
  18. }

6.3 顺序结构

image.png

6.4 if单选择结构

image.png

6.5 switch多选择结构

image.png

6.6 while循环

image.png

6.7 do while循环

image.png

6.8 for循环(重点)

image.png

  • 九九乘法表 ```java package day1;

public class Fortest { public static void main(String[] args) {

  1. for (int j = 1; j <= 9; j++) {
  2. for (int i = 1; i <= j; i++) {
  3. System.out.print(i + "*" + j + "=" + (j * i)+"\t");
  4. }
  5. System.out.println();
  6. }
  7. }

}

  1. <a name="gNHyu"></a>
  2. #### 6.9 增强for循环
  3. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/298474/1618043481697-cbc1af06-8d0a-49b7-a9ce-8f9ddda9ec52.png#align=left&display=inline&height=538&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1076&originWidth=2280&size=784325&status=done&style=none&width=1140)
  4. <a name="efFTd"></a>
  5. #### 6.10 break continue
  6. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/298474/1618043781270-37ccd461-f157-4e14-b6c9-8181aff928ec.png#align=left&display=inline&height=541&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1082&originWidth=1880&size=1598099&status=done&style=none&width=940)
  7. <a name="WSUwA"></a>
  8. ### 七、方法
  9. <a name="EexD2"></a>
  10. #### 7.1 什么是方法
  11. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/298474/1618052223665-231195c7-562a-4e2b-a3fd-16ef5869b47c.png#align=left&display=inline&height=404&margin=%5Bobject%20Object%5D&name=image.png&originHeight=808&originWidth=2218&size=654736&status=done&style=none&width=1109)
  12. <a name="yVBPl"></a>
  13. #### 7.2 方法的定义
  14. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/298474/1618052278637-0157fbfd-4019-4e28-bcf7-e54b70ad8ce3.png#align=left&display=inline&height=606&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1212&originWidth=2420&size=1445076&status=done&style=none&width=1210)
  15. <a name="VLhLM"></a>
  16. #### 7.3 方法的调用
  17. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/298474/1618052769155-eecc31f7-bb36-419a-ba99-4bfcb46a3b8e.png#align=left&display=inline&height=436&margin=%5Bobject%20Object%5D&name=image.png&originHeight=872&originWidth=1302&size=676459&status=done&style=none&width=651)
  18. <a name="yJbO2"></a>
  19. #### 7.4 方法的重载
  20. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/298474/1618116870884-0f9c8e3e-b6bc-4891-9c45-8fd11ae89a47.png#align=left&display=inline&height=520&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1040&originWidth=2266&size=666606&status=done&style=none&width=1133)
  21. <a name="YMyhh"></a>
  22. #### 7.5 命令行传参
  23. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/298474/1618117161150-8ecd9237-ffa7-4429-bb9a-d14572e104b9.png#align=left&display=inline&height=464&margin=%5Bobject%20Object%5D&name=image.png&originHeight=928&originWidth=2168&size=641844&status=done&style=none&width=1084)
  24. <a name="o6Q5l"></a>
  25. #### 7.6 可变参数
  26. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/298474/1618117485782-41573eb1-89e9-4987-88ce-91d782272565.png#align=left&display=inline&height=544&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1088&originWidth=2238&size=811759&status=done&style=none&width=1119)
  27. ```java
  28. package day1;
  29. public class demo03 {
  30. public static void main(String[] args) {
  31. test(1, 3, 4, 5, 56, 6);
  32. }
  33. /**
  34. * @不定长参数
  35. */
  36. public static void test(int... i) {
  37. for (int j = 0; j < i.length; j++) {
  38. System.out.println(i[j]);
  39. }
  40. }
  41. }

7.7 递归

image.png

  1. package day1;
  2. public class demo3 {
  3. public static void main(String[] args) {
  4. System.out.println(test(1));
  5. }
  6. //测试递归,求阶乘
  7. public static int test(int n){
  8. if (n==1){
  9. return 1;
  10. }else {
  11. return n*test(n-1);
  12. }
  13. }
  14. }

八、数组

8.1 数组的定义

image.png

8.2 数组声明创建

image.png

8.3 数组的三种初始化

image.png

8.4 数组的四个基本特点

image.png

8.5 数组边界

image.png

8.6 多维数组

image.png

  1. package day1;
  2. public class demo4 {
  3. public static void main(String[] args) {
  4. // 多维数组
  5. // 遍历多维数组的值
  6. int[][] arr= {{1,3},{2,34,5},{4,3}};
  7. for (int i = 0; i < arr.length; i++) {
  8. for (int j = 0; j <arr[i].length ; j++) {
  9. System.out.println(arr[i][j]);
  10. }
  11. }
  12. }
  13. }

8.7 Arrays类详解

image.png

九、面向对象

9.1 思想

image.png

9.2 什么是面向对象

image.png9.3 类和对象的关系

image.png

9.4 构造器详解

image.png

  1. package demo2;
  2. public class Person {
  3. String name;
  4. int age;
  5. // 默认无参构造器,如果有有参,无参构造器就会消失,需要手动定义
  6. public Person(){
  7. }
  8. public Person(String name, int age) {
  9. this.name = name;
  10. this.age = age;
  11. }
  12. }

9.5 对象内存分析

image.png

9.6 封装

image.png

  1. package demo2;
  2. public class Person {
  3. private String name;
  4. private int age;
  5. // 默认无参构造器,如果有有参,无参构造器就会消失,需要手动定义
  6. public Person(){
  7. }
  8. public Person(String name, int age) {
  9. this.name = name;
  10. this.age = age;
  11. }
  12. public void setName(String name){
  13. this.name =name;
  14. }
  15. public String getName() {
  16. return name;
  17. }
  18. public int getAge() {
  19. return age;
  20. }
  21. public void setAge(int age) {
  22. this.age = age;
  23. }
  24. }

9.7 继承

image.png

9.8 super

image.png

9.9 重写

image.png

9.10 多态

image.png
image.png

  1. package demo3;
  2. public class Test {
  3. public static void main(String[] args) {
  4. Student s1 = new Student();
  5. Person s2 = new Student();
  6. s1.eat();
  7. }
  8. }

9.11 instance 引用类型转换

  • 可以通过instance来判断2个类是否存在父子关系

image.png

  1. package demo3;
  2. public class Test {
  3. public static void main(String[] args) {
  4. // 低转高自动转型
  5. // Student s1 = new Student();
  6. // Person person = s1;
  7. // 高转低强制转换
  8. Person person = new Student();
  9. Student s1 = (Student) person;
  10. s1.say();
  11. }
  12. }

9.12 抽象类

image.png

抽象类注意事项:

  • 不能new这个抽象类,只能靠子类去实现它:约束!
  • 抽象类中可以写普通方法
  • 抽象方法必须在抽象类中
  • 抽象类有无参构造器

案例:

  1. 定义一个抽象类Person,里面有个抽象方法doSomeThing ```java package demo04;

public abstract class Person { // public abstract void doSomeThing(); }

  1. 2. 定义一个Student类继承Person,需要重写里面的所有方法
  2. ```java
  3. package demo04;
  4. public class Student extends Person{
  5. @Override
  6. public void doSomeThing() {
  7. System.out.println(5555);
  8. }
  9. }

9.13 接口的定义与实现

image.png

接口的注意事项:

  • 约束
  • 定义一些方法,让不同的人去实现~10>1
  • 里面方法必须是抽象方法 public abstract
  • 里面的属性都是静态常量 public static final
  • 结构不能对实例化,结构没有构造方法
  • 实现implements可以实现多个接口
  • 必须重写接口中的方法

案例:

  1. 定义2个接口分别是PersonService和UserService,里面分别有鸽子的抽象方法 ```java package demo05;

public interface PersonService { void edit(); }

  1. ```java
  2. package demo05;
  3. public interface UserService {
  4. // 里面的属性都是静态常量 public static final
  5. static final int NUM = 0;
  6. // 里面的方法 都是 public abstract 可以省略 没有方法体,可以有参数
  7. void add(String name);
  8. void delete(String name);
  9. void change(String name);
  10. void select(String name);
  11. }
  1. 定义一个实现类来实现PersonService和UserService,并且重写他们的全部方法 ```java package demo05; //必须重写接口所有的方法 public class UserServiceImpl implements UserService,PersonService {

    @Override public void add(String name) {

    }

    @Override public void delete(String name) {

    }

    @Override public void change(String name) {

    }

    @Override public void select(String name) {

    }

    @Override public void edit() {

    } }

  1. <a name="0VMMf"></a>
  2. #### 9.14 异常
  3. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/298474/1618279751470-235a0d0d-b715-419e-82f4-cf78e6fbe1b1.png#align=left&display=inline&height=363&margin=%5Bobject%20Object%5D&name=image.png&originHeight=884&originWidth=2230&size=923679&status=done&style=none&width=916)
  4. <a name="eAR0Q"></a>
  5. #### 9.15 异常-体系架构
  6. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/298474/1618280109612-5e34022c-dba5-4e38-b0dd-7c1b416da06a.png#align=left&display=inline&height=573&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1146&originWidth=1902&size=690551&status=done&style=none&width=951)
  7. <a name="ys71C"></a>
  8. #### 9.16 异常-ERROR
  9. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/298474/1618280339667-42bad6b7-d59b-45e8-a7ed-8ef4d027f06d.png#align=left&display=inline&height=403&margin=%5Bobject%20Object%5D&name=image.png&originHeight=806&originWidth=2344&size=763306&status=done&style=none&width=1172)
  10. <a name="bcjyF"></a>
  11. #### 9.17 异常-Exception
  12. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/298474/1618280379621-4b6ba20c-6d25-4fe0-8061-5a401b23659c.png#align=left&display=inline&height=578&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1156&originWidth=2276&size=1057996&status=done&style=none&width=1138)
  13. <a name="AypgI"></a>
  14. #### 9.18 异常-捕获-抛出
  15. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/298474/1618280619542-8943601f-c01e-48dc-89dc-13fd44597317.png#align=left&display=inline&height=315&margin=%5Bobject%20Object%5D&name=image.png&originHeight=630&originWidth=1024&size=172975&status=done&style=none&width=512)
  16. ```java
  17. package demo6;
  18. public class TestException {
  19. public static void main(String[] args) {
  20. int a=1;
  21. int b=0;
  22. // 调用异常的方法需要接收异常
  23. try {
  24. new TestException().test(1, 3);
  25. } catch (Exception e) {
  26. e.printStackTrace();
  27. } finally {
  28. }
  29. try{
  30. // 可能出现异常的代码
  31. System.out.println(a/b);
  32. }catch (ArithmeticException e){
  33. // 定义多个异常,异常等级从小到大
  34. System.out.println("捕获到异常了ArithmeticException");
  35. }catch (Exception e){
  36. System.out.println("捕获到异常了ArithmeticExceptionException");
  37. }catch (Throwable e){
  38. System.out.println("捕获到异常了Throwable");
  39. }
  40. finally {
  41. System.out.println("无论什么情况都会执行");
  42. }
  43. }
  44. // 抛出异常的方法
  45. public void test(int a,int b)throws Exception{
  46. // 在方法中定义异常
  47. throw new ArithmeticException();
  48. }
  49. }

9.19 异常-自定义异常

image.png

9.19 异常总结image.png

9.20 基本包装类型

image.png

9.21 integer类的概述和使用

image.png

9.21 包装类-int和String 的相互转换

image.png

9.22 包装类-自动装箱和拆箱

image.png

十、集合

10.1 集合类体系结构

  • LIST可重复(单列)
  • SET不可重复(单列)
  • image.png

    10.2 Collection的创建和使用

    ```java package demo7;

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

public class TestConnection { public static void main(String[] args) {

  1. Collection<String> c1 = new ArrayList<>();
  2. c1.add("你好我是collection");
  3. c1.add("你好我是collection");
  4. c1.add("你好我是collection");
  5. System.out.println(c1);
  6. }

}

  1. <a name="pcCco"></a>
  2. #### 10.3 Collection的常用方法
  3. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/298474/1618301234264-68a926fd-8517-4be2-859e-15dc100d621c.png#align=left&display=inline&height=397&margin=%5Bobject%20Object%5D&name=image.png&originHeight=794&originWidth=1682&size=465150&status=done&style=none&width=841)
  4. <a name="MeaZW"></a>
  5. #### 10.4 Collection集合的遍历
  6. ```java
  7. package demo7;
  8. import java.util.ArrayList;
  9. import java.util.Collection;
  10. import java.util.Iterator;
  11. public class TestConnection {
  12. public static void main(String[] args) {
  13. Collection<String> c1 = new ArrayList<>();
  14. c1.add("你好我是collection1");
  15. c1.add("你好我是collection2");
  16. c1.add("你好我是collection3");
  17. // 使用 iterator()
  18. // 返回此集合中的元素的迭代器
  19. Iterator<String> iterator = c1.iterator();
  20. // hasNext()
  21. // 如果迭代具有更多元素,则返回 true 。
  22. // 使用迭代器遍历里面的元素
  23. // next()
  24. // 返回迭代中的下一个元素。
  25. while (iterator.hasNext()) {
  26. // next()
  27. // 返回迭代中的下一个元素。
  28. String str = iterator.next();
  29. System.out.println(str);
  30. }
  31. }
  32. }

10.5 Collection集合的使用步骤

image.png

10.6 Collection使用学生对象来存储

  1. 定义一个学生类,里面有2个属性,并且有有参无参构造器和get,set方法 ```java package demo7;

public class Student { private String name; private int age;

  1. public Student() {
  2. }
  3. public Student(String name, int age) {
  4. this.name = name;
  5. this.age = age;
  6. }
  7. public String getName() {
  8. return name;
  9. }
  10. public void setName(String name) {
  11. this.name = name;
  12. }
  13. public int getAge() {
  14. return age;
  15. }
  16. public void setAge(int age) {
  17. this.age = age;
  18. }

}

  1. 2. 主方法
  2. ```java
  3. package demo7;
  4. import java.util.ArrayList;
  5. import java.util.Collection;
  6. import java.util.Iterator;
  7. public class TestCollection {
  8. public static void main(String[] args) {
  9. //定义一个Student类的集合
  10. Collection<Student> coll = new ArrayList<>();
  11. // 定义三个学生
  12. Student s1 = new Student("周杰伦", 12);
  13. Student s2 = new Student("林俊杰", 15);
  14. Student s3 = new Student("蔡徐坤", 16);
  15. //将三个学生添加到集合
  16. coll.add(s1);
  17. coll.add(s2);
  18. coll.add(s3);
  19. // 拿到集合的可迭代对象
  20. Iterator<Student> iterator = coll.iterator();
  21. // 遍历可迭代对象
  22. while (iterator.hasNext()){
  23. Student next = iterator.next();
  24. System.out.println(next.getName()+next.getAge());
  25. }
  26. }
  27. }

10.7 List集合的概述和特点

image.png

  1. package demo7;
  2. import java.util.ArrayList;
  3. import java.util.Iterator;
  4. import java.util.List;
  5. public class TestList {
  6. public static void main(String[] args) {
  7. // 有序列表可重复
  8. List<String> list=new ArrayList<>();
  9. list.add("张飞");
  10. list.add("关羽");
  11. list.add("张飞");
  12. Iterator<String> iterator = list.iterator();
  13. while (iterator.hasNext()){
  14. String next = iterator.next();
  15. System.out.println(next);
  16. }
  17. }
  18. }

10.8 List的特殊方法

  • 遍历List的列表最使用 for > list.size()

image.png

  1. package demo7;
  2. import java.util.ArrayList;
  3. import java.util.Iterator;
  4. import java.util.List;
  5. public class TestList {
  6. public static void main(String[] args) {
  7. // 有序列表可重复
  8. List<String> list=new ArrayList<>();
  9. list.add("张飞");
  10. list.add("关羽");
  11. list.add("张飞");
  12. // Iterator<String> iterator = list.iterator();
  13. // while (iterator.hasNext()){
  14. // String next = iterator.next();
  15. // System.out.println(next);
  16. //
  17. //
  18. // }
  19. // 新增元素在下标1
  20. // list.add(1,"苟福成");
  21. // 删除指定下标元素
  22. // list.remove(2);
  23. // System.out.println(list);
  24. // 修改指定下标元素
  25. // list.set(1,"草上飞");
  26. // System.out.println(list);
  27. // 根据指定下表返回元素
  28. // String s = list.get(1);
  29. // System.out.println(s);
  30. // 遍历List可以使用get配合list.size()
  31. for (int i = 0; i <list.size(); i++) {
  32. System.out.println(list.get(i));
  33. }
  34. }
  35. }

10.10 列表迭代器

image.png

10.11 增强for循环

image.png

10.12 List的三种遍历方式

  1. package demo7;
  2. import java.util.ArrayList;
  3. import java.util.Collection;
  4. import java.util.Iterator;
  5. import java.util.List;
  6. public class TestThree {
  7. public static void main(String[] args) {
  8. List<Student> coll = new ArrayList<Student>();
  9. // 定义三个学生
  10. Student s1 = new Student("周杰伦", 12);
  11. Student s2 = new Student("林俊杰", 15);
  12. Student s3 = new Student("蔡徐坤", 16);
  13. coll.add(s1);
  14. coll.add(s2);
  15. coll.add(s3);
  16. // 使用迭代器遍历
  17. Iterator<Student> iterator = coll.iterator();
  18. while (iterator.hasNext()){
  19. Student stu = iterator.next();
  20. System.out.println(stu.getName());
  21. System.out.println(stu.getAge());
  22. }
  23. System.out.println("=====================================");
  24. // 使用for 下标遍历
  25. for (int i = 0; i < coll.size(); i++) {
  26. System.out.println(coll.get(i).getName());
  27. System.out.println(coll.get(i).getAge());
  28. }
  29. System.out.println("=====================================");
  30. // 使用增强for循环遍历
  31. for (Student student : coll) {
  32. System.out.println(student.getName());
  33. System.out.println(student.getAge());
  34. }
  35. }
  36. }

10.13 常见数据结构之栈

image.png

10.14 常见数据结构之队列

image.png

10.13 常见数据结构之数组

image.png

10.14 常见数据结构之链表

image.png

10.15 List集合子类特点

image.pngl
练习:

  1. package demo7;
  2. import java.util.ArrayList;
  3. import java.util.Iterator;
  4. import java.util.LinkedList;
  5. public class TestLink {
  6. public static void main(String[] args) {
  7. // 查询快增删慢
  8. ArrayList<String> str = new ArrayList<>();
  9. str.add("张飞");
  10. str.add("刘备");
  11. str.add("关羽");
  12. System.out.println("====================================");
  13. // 迭代器遍历
  14. Iterator<String> striter = str.iterator();
  15. while (striter.hasNext()){
  16. String next = striter.next();
  17. System.out.println(next);
  18. }
  19. System.out.println("====================================");
  20. // 索引下标遍历
  21. for (int i = 0; i < str.size(); i++) {
  22. String s = str.get(i);
  23. System.out.println(s);
  24. }
  25. // 增强for
  26. for (String s : str) {
  27. System.out.println(s);
  28. }
  29. System.out.println("====================================");
  30. // linklist查询慢增删快
  31. LinkedList<String> link = new LinkedList<>();
  32. link.add("周杰伦1");
  33. link.add("周杰伦2");
  34. link.add("周杰伦3");
  35. Iterator<String> linkiter = link.iterator();
  36. // 迭代器遍历
  37. while(linkiter.hasNext()){
  38. String next = linkiter.next();
  39. System.out.println(next);
  40. }
  41. // 索引下标遍历
  42. for (int i = 0; i < link.size(); i++) {
  43. String s = link.get(i);
  44. System.out.println(s);
  45. }
  46. // 增强for循环遍历
  47. for (String s : link) {
  48. System.out.println(s);
  49. }
  50. }
  51. }

10.16 LinkedList集合的特有功能

image.png

10.17 set集合概述和特点

image.png

  1. import java.util.HashSet;
  2. import java.util.Iterator;
  3. import java.util.Set;
  4. public class demo08 {
  5. public static void main(String[] args) {
  6. // 不可重复,不按顺序,没有索引遍历
  7. Set<String> strings = new HashSet<String>();
  8. strings.add("张飞1");
  9. strings.add("张飞2");
  10. strings.add("张飞3");
  11. strings.add("张飞4");
  12. strings.add("张飞5");
  13. strings.add("刘备");
  14. strings.add("张飞1");
  15. // 迭代器遍历
  16. Iterator<String> iterator = strings.iterator();
  17. while (iterator.hasNext()){
  18. String next = iterator.next();
  19. System.out.println(next);
  20. }
  21. System.out.println("========================");
  22. // 增强for遍历
  23. for (String string : strings) {
  24. System.out.println(string);
  25. }
  26. }
  27. }

10.18 哈希值

image.png

  1. package demo08;
  2. public class TestHash {
  3. public static void main(String[] args) {
  4. System.out.println("你好".hashCode());//652829
  5. System.out.println("中国".hashCode());//642672
  6. }
  7. }

10.18 HashSet集合概述和特点

image.png

10.19 HashSet集合保证元素唯一性-源码解析

image.png

10.20 常见数据结构之哈希表

image.png
image.png

10.21 HashSet集合存储学生对象并遍历

image.png

需要重写Student类hascode 和equsal方法

  1. package demo08;
  2. import java.util.Objects;
  3. public class Student {
  4. private String name;
  5. private int age;
  6. public Student() {
  7. }
  8. public Student(String name, int age) {
  9. this.name = name;
  10. this.age = age;
  11. }
  12. public String getName() {
  13. return name;
  14. }
  15. public void setName(String name) {
  16. this.name = name;
  17. }
  18. public int getAge() {
  19. return age;
  20. }
  21. public void setAge(int age) {
  22. this.age = age;
  23. }
  24. //重写2个方法
  25. @Override
  26. public boolean equals(Object o) {
  27. if (this == o) return true;
  28. if (o == null || getClass() != o.getClass()) return false;
  29. Student student = (Student) o;
  30. return age == student.age && Objects.equals(name, student.name);
  31. }
  32. @Override
  33. public int hashCode() {
  34. return Objects.hash(name, age);
  35. }
  36. }

主方法

  1. package demo08;
  2. import java.util.HashSet;
  3. public class TestHashSet {
  4. public static void main(String[] args) {
  5. //不可重复,实现 姓名和 年龄相同 就算一个人,需要重新对象类的hashcode 和 equs方法
  6. HashSet<Student> students = new HashSet<>();
  7. Student student1 = new Student("张飞",21);
  8. Student student2 = new Student("刘备",22);
  9. Student student3 = new Student("关羽",23);
  10. // 重复的人员
  11. Student student4 = new Student("关羽",23);
  12. students.add(student1);
  13. students.add(student2);
  14. students.add(student3);
  15. students.add(student4);
  16. for (Student student : students) {
  17. System.out.println(student.getName()+student.getAge());
  18. }
  19. }
  20. }

10.21 linkedHaset集合概述和特点

image.png
image.png

10.22 treeSet集合概述和特点

image.png

  1. package demo08;
  2. import java.util.TreeSet;
  3. public class TestTreeSet {
  4. public static void main(String[] args) {
  5. // 注意这里要使用引用类型包装类
  6. // 不可重复切有序
  7. TreeSet<Integer> integers = new TreeSet<>();
  8. integers.add(1);
  9. integers.add(22);
  10. integers.add(15);
  11. integers.add(30);
  12. integers.add(15);
  13. for (Integer integer : integers) {
  14. System.out.println(integer);
  15. }
  16. }
  17. }

10.23 自然排序Comparable的使用

image.png

  • 主方法 ```java package demo08;

import java.util.TreeSet;

public class TestTreeSet { public static void main(String[] args) {

  1. TreeSet<Student> treeSet = new TreeSet<Student>();
  2. Student zhoujielun = new Student("zhoujielun", 22);
  3. Student wangfei = new Student("wangfei", 32);
  4. Student xiaofeifei = new Student("xiaofeifei", 12);
  5. Student goufucheng = new Student("goufucheng", 52);
  6. treeSet.add(zhoujielun);
  7. treeSet.add(wangfei);
  8. treeSet.add(xiaofeifei);
  9. treeSet.add(goufucheng);
  10. for (Student student : treeSet) {
  11. System.out.println(student.getName()+":"+student.getAge());
  12. }
  13. }

}

  1. - 泛型如果为类,那么这个类必须实现Comparable接口,并且重写compareTo方法
  2. ```java
  3. public class Student implements Comparable<Student> {
  4. @Override
  5. public int compareTo(Student o) {
  6. return -1;
  7. }
  8. }

返回值为 -1 > 1 分别代表: -1 :对存储的数据倒着打印 0 :只会存储一个元素 1:对存储的数据正着打印

  1. package demo08;
  2. import java.util.Objects;
  3. // 需要实现Comparable
  4. public class Student implements Comparable<Student> {
  5. private String name;
  6. private int age;
  7. public Student() {
  8. }
  9. public Student(String name, int age) {
  10. this.name = name;
  11. this.age = age;
  12. }
  13. public String getName() {
  14. return name;
  15. }
  16. public void setName(String name) {
  17. this.name = name;
  18. }
  19. public int getAge() {
  20. return age;
  21. }
  22. public void setAge(int age) {
  23. this.age = age;
  24. }
  25. //重写2个方法
  26. @Override
  27. public boolean equals(Object o) {
  28. if (this == o) return true;
  29. if (o == null || getClass() != o.getClass()) return false;
  30. Student student = (Student) o;
  31. return age == student.age && Objects.equals(name, student.name);
  32. }
  33. @Override
  34. public int hashCode() {
  35. return Objects.hash(name, age);
  36. }
  37. @Override
  38. public int compareTo(Student o) {
  39. // this 代表传入的 o代表上一个对像 2个进行对比
  40. /**
  41. * zhoujielun22-------->zhoujielun22
  42. * wangfei32-------->zhoujielun22
  43. * xiaofeifei12-------->zhoujielun22
  44. * goufucheng52-------->zhoujielun22
  45. * goufucheng52-------->wangfei32
  46. * xiaofeifei:12
  47. * zhoujielun:22
  48. * wangfei:32
  49. * goufucheng:52
  50. */
  51. int num = this.age - o.age; //此处根据年龄排序 规则是 数值越大就第最后一个输出
  52. // int num = this.age - o.age;此处根据年龄倒叙
  53. System.out.println(this.getName()+this.getAge()+"-------->"+o.getName()+o.getAge());
  54. // 年龄相同时按照字母排序 ,否则添加不上
  55. int resutlt = num==0?this.name.compareTo(o.name):num;
  56. System.out.println(resutlt);
  57. return resutlt;
  58. }
  59. }

10.21 比较器Comparable的使用

image.png

  1. package demo09;
  2. import java.util.Comparator;
  3. import java.util.HashSet;
  4. import java.util.TreeSet;
  5. public class TestHashset {
  6. public static void main(String[] args) {
  7. //使用匿名内部类 可以省去实现 Comparator接口
  8. TreeSet<Student> treeSet= new TreeSet<Student>(new Comparator<Student>() {
  9. @Override
  10. // 重写 Comparator对比方法
  11. public int compare(Student o1, Student o2) {
  12. int num= o1.getAge()-o2.getAge();
  13. int result = num==0?o1.getName().compareTo(o2.getName()):num;
  14. return result;
  15. }
  16. });
  17. Student zhoujielun = new Student("zhoujielun", 22);
  18. Student wangfei = new Student("wangfei", 32);
  19. Student xiaofeifei = new Student("xiaofeifei", 12);
  20. Student goufucheng = new Student("goufucheng", 52);
  21. Student helen = new Student("helen", 52);
  22. treeSet.add(zhoujielun);
  23. treeSet.add(wangfei);
  24. treeSet.add(xiaofeifei);
  25. treeSet.add(goufucheng);
  26. treeSet.add(helen);
  27. for (Student student : treeSet) {
  28. System.out.println(student.getName()+":"+student.getAge());
  29. }
  30. }
  31. }

十一、泛型

11.1 泛型的概述

image.png

11.2 泛型类

  1. package demo09;
  2. import obj.Testconstor;
  3. //泛型类
  4. public class TestGeneric<T> {
  5. private T t;
  6. public T getT() {
  7. return t;
  8. }
  9. public void setT(T t) {
  10. this.t = t;
  11. }
  12. }

11.3 泛型方法

  1. package demo09;
  2. import obj.Testconstor;
  3. //泛型方法
  4. public class TestGeneric {
  5. public <T> void getN(T t){
  6. System.out.println(t);
  7. }
  8. }

11.4 泛型接口

  1. package demo10;
  2. public interface UserService<T> {
  3. void add(T t);
  4. }
  5. ----实现接口
  6. package demo10;
  7. public class UserServiceImpl<T> implements UserService<T>{
  8. @Override
  9. public void add(T t) {
  10. }
  11. }

11.5 类型通配符

image.png
image.png

十二、Map

12.1 map的概述和使用

image.png

  1. package demo12;
  2. import java.util.HashMap;
  3. public class TestHashMap {
  4. public static void main(String[] args) {
  5. // <k,v> k=键类型 v=值类型
  6. HashMap<Integer, String> map = new HashMap<>();
  7. map.put(1,"张飞");
  8. map.put(2,"张san");
  9. map.put(3,"张飞");
  10. System.out.println(map);
  11. }
  12. }

12.2 map的常用方法

image.png

12.3 map的值获取

image.png

  1. package demo12;
  2. import java.util.Collection;
  3. import java.util.HashMap;
  4. import java.util.Map;
  5. import java.util.Set;
  6. public class TestHashMap {
  7. public static void main(String[] args) {
  8. // <k,v> k=键类型 v=值类型
  9. HashMap<Integer, String> map = new HashMap<>();
  10. map.put(1,"张飞");
  11. map.put(2,"张san");
  12. map.put(3,"张飞");
  13. // 根据键拿到值
  14. // System.out.println(map.get(1));
  15. // 拿到所有的键
  16. // Set<Integer> integers = map.keySet();
  17. // for (Integer integer : integers) {
  18. // System.out.println(integer);
  19. //
  20. // }
  21. // 拿到所有的values
  22. // Collection<String> values = map.values();
  23. // for (String value : values) {
  24. // System.out.println(value);
  25. //
  26. // }
  27. // 获取所有键值对对象的集合
  28. Set<Map.Entry<Integer, String>> entries = map.entrySet();
  29. for (Map.Entry<Integer, String> entry : entries) {
  30. System.out.println(entry);
  31. }
  32. }
  33. }

12.4 map的遍历方式一

  1. // map集合遍历1
  2. // 首先获取所有的key,通过getkey 拿到value
  3. Set<Integer> integers = map.keySet();
  4. for (Integer integer : integers) {
  5. String s = map.get(integer);
  6. System.out.println(integer+","+s);
  7. }

12.4 map的遍历方式二

image.png

  1. // map 集合遍历2
  2. Set<Map.Entry<Integer, String>> entries = map.entrySet();
  3. for (Map.Entry<Integer, String> entry : entries) {
  4. Integer key = entry.getKey();
  5. String value = entry.getValue();
  6. System.out.println(key+":"+value);
  7. }

12.5 map的遍历学生对象

  1. package demo12;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. import java.util.Set;
  5. public class TestHashMapStu {
  6. public static void main(String[] args) {
  7. //
  8. Student student1 = new Student("张飞",21);
  9. Student student2 = new Student("刘备",22);
  10. Student student3 = new Student("关羽",23);
  11. HashMap<Integer, Student> map = new HashMap<>();
  12. map.put(1,student1);
  13. map.put(2,student2);
  14. map.put(3,student3);
  15. //方式一遍历
  16. Set<Integer> integers = map.keySet();
  17. for (Integer integer : integers) {
  18. Student student = map.get(integer);
  19. System.out.println("key:"+integer+" value:"+student.getName()+":"+student.getAge());
  20. }
  21. System.out.println("============================================");
  22. Set<Map.Entry<Integer, Student>> entries = map.entrySet();
  23. for (Map.Entry<Integer, Student> entry : entries) {
  24. Integer integer = entry.getKey();
  25. Student student = entry.getValue();
  26. System.out.println("key:"+integer+" value:"+student.getName()+":"+student.getAge());
  27. }
  28. }
  29. }