码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Java筑基28-泛型


    目录

    一、泛型入门

    二、泛型介绍

    三、泛型语法和应用

    1.泛型语法

    2.泛型案例

    3.泛型使用细节

    4.泛型经典练习题

    四、自定义泛型

    1.自定义泛型类

    案例1

    2.自定义泛型接口

    3.自定义泛型方法

    自定义泛型方法练习

    五、泛型的继承和通配符

    六、泛型作业(练习)


    一、泛型入门

    1.使用传统方式

    1. package com.feiyang.basic14;
    2. import com.feiyang.static1.main;
    3. import java.util.ArrayList;
    4. /**
    5. * @author:飞扬
    6. * @公众hao:程序员飞扬
    7. * @description:泛型
    8. */
    9. public class Generic01 {
    10. public static void main(String[] args) {
    11. //使用传统方式解决
    12. ArrayList arrayList = new ArrayList();
    13. arrayList.add(new Dog("大黄",5));
    14. arrayList.add(new Dog("黑子",6));
    15. arrayList.add(new Dog("小花",2));
    16. //加入不小心添加了只猫
    17. arrayList.add(new Cat("咪咪",3));
    18. for (Object o : arrayList) {
    19. //向下转型(影响效率)
    20. Dog o1 = (Dog) o;
    21. System.out.println(o1.getName() + "-" + o1.getAge());
    22. }
    23. }
    24. }
    25. class Dog{
    26. private String name;
    27. private Integer age;
    28. public Dog(String name, Integer age) {
    29. this.name = name;
    30. this.age = age;
    31. }
    32. public String getName() {
    33. return name;
    34. }
    35. public void setName(String name) {
    36. this.name = name;
    37. }
    38. public Integer getAge() {
    39. return age;
    40. }
    41. public void setAge(Integer age) {
    42. this.age = age;
    43. }
    44. @Override
    45. public String toString() {
    46. return "Dog{" +
    47. "name='" + name + '\'' +
    48. ", age='" + age + '\'' +
    49. '}';
    50. }
    51. }
    52. class Cat{
    53. private String name;
    54. private Integer age;
    55. public Cat(String name, Integer age) {
    56. this.name = name;
    57. this.age = age;
    58. }
    59. public String getName() {
    60. return name;
    61. }
    62. public void setName(String name) {
    63. this.name = name;
    64. }
    65. public Integer getAge() {
    66. return age;
    67. }
    68. public void setAge(Integer age) {
    69. this.age = age;
    70. }
    71. @Override
    72. public String toString() {
    73. return "Dog{" +
    74. "name='" + name + '\'' +
    75. ", age='" + age + '\'' +
    76. '}';
    77. }
    78. }

    打印输出:

    大黄-5

    黑子-6

    小花-2

    Exception in thread "main" java.lang.ClassCastException: com.feiyang.basic14.Cat cannot be cast to com.feiyang.basic14.Dog

    at com.feiyang.basic14.Generic01.main(Generic01.java:22)

    2.用泛型解决上面的问题

    1. /**
    2. * @author:飞扬
    3. * @公众hao:程序员飞扬
    4. * @description:泛型
    5. */
    6. public class Generic02 {
    7. public static void main(String[] args) {
    8. //使用传统方式解决
    9. ArrayList arrayList = new ArrayList();
    10. arrayList.add(new Dog("大黄",5));
    11. arrayList.add(new Dog("黑子",6));
    12. arrayList.add(new Dog("小花",2));
    13. //加入不小心添加了只猫
    14. //arrayList.add(new Cat("咪咪",3));
    15. // for (Object o : arrayList) {
    16. // //向下转型(影响效率)
    17. // Dog o1 = (Dog) o;
    18. // System.out.println(o1.getName() + "-" + o1.getAge());
    19. // }
    20. for (Dog o : arrayList) {
    21. System.out.println(o.getName() + "-" + o.getAge());
    22. }
    23. }
    24. }

    打印输出:

    大黄-5

    黑子-6

    小花-2

    二、泛型介绍

    1. package com.feiyang.basic14;
    2. /**
    3. * @author:飞扬
    4. * @公众hao:程序员飞扬
    5. * @description:泛型介绍
    6. */
    7. public class Generic03 {
    8. public static void main(String[] args) {
    9. }
    10. }
    11. class Person{
    12. //属性类型泛型化
    13. E s;//E表示s的数据类型,该数据类型在定义Person对象的时候指定,即在编译时就确定E是什么类型。
    14. //参数类型泛型化
    15. public Person(E s) {
    16. this.s = s;
    17. }
    18. //返回值类型泛型化
    19. public E func(){
    20. return s;
    21. }
    22. }

    三、泛型语法和应用

    1.泛型语法

    2.泛型案例

    1. package com.feiyang.basic14;
    2. import java.util.HashMap;
    3. import java.util.HashSet;
    4. import java.util.Map;
    5. import java.util.Set;
    6. /**
    7. * @author:飞扬
    8. * @公众hao:程序员飞扬
    9. * @description:泛型应用案例
    10. */
    11. public class GenericExercise {
    12. public static void main(String[] args) {
    13. HashSet hashSet = new HashSet<>();
    14. hashSet.add(new Student("tom",35));
    15. hashSet.add(new Student("jack",16));
    16. hashSet.add(new Student("feiyang",28));
    17. for (Student student : hashSet) {
    18. System.out.println(student.getName() + "-" + student.getAge());
    19. }
    20. HashMap hm = new HashMap<>();
    21. hm.put("tom",new Student("tom",35));
    22. hm.put("jack",new Student("jack",16));
    23. hm.put("feiyang",new Student("feiyang",28));
    24. Set> entries = hm.entrySet();
    25. for (Map.Entry entry : entries) {
    26. System.out.println(entry.getKey() + "-" + entry.getValue());
    27. }
    28. }
    29. }
    30. class Student{
    31. private String name;
    32. private int age;
    33. public Student(String name, int age) {
    34. this.name = name;
    35. this.age = age;
    36. }
    37. public String getName() {
    38. return name;
    39. }
    40. public void setName(String name) {
    41. this.name = name;
    42. }
    43. public int getAge() {
    44. return age;
    45. }
    46. public void setAge(int age) {
    47. this.age = age;
    48. }
    49. @Override
    50. public String toString() {
    51. return "Student{" +
    52. "name='" + name + '\'' +
    53. ", age=" + age +
    54. '}';
    55. }
    56. }

    打印输出:

    jack-16

    tom-35

    feiyang-28

    tom-Student{name='tom', age=35}

    jack-Student{name='jack', age=16}

    feiyang-Student{name='feiyang', age=28}

    3.泛型使用细节

    1. package com.feiyang.basic14;
    2. import java.util.ArrayList;
    3. import java.util.List;
    4. /**
    5. * @author:飞扬
    6. * @公众hao:程序员飞扬
    7. * @description:泛型使用细节
    8. */
    9. public class GenericDetail {
    10. public static void main(String[] args) {
    11. //1.给泛型指定数据类型,要求是引用数据类型,不能是基本数据类型
    12. ArrayList arrayList = new ArrayList();//OK
    13. //ArrayList arrayList2 = new ArrayList();//error
    14. //2.给泛型指定具体类型后,可以传入该类型或其子类型
    15. Pig aPig = new Pig(new A());
    16. aPig.f();
    17. //Pig bPig = new Pig(new B());//error
    18. Pig bPig2 = new Pig(new B());//
    19. bPig2.f();
    20. //3.泛型的使用
    21. ArrayList list = new ArrayList();
    22. List list2 = new ArrayList();
    23. //也可以简写(推荐),编译器会进行类型推断
    24. ArrayList list3 = new ArrayList<>();
    25. List list4 = new ArrayList<>();
    26. List pig = new ArrayList<>();
    27. //如果这样写,泛型默认是Object,
    28. ArrayList list5 = new ArrayList();//等价与=>ArrayList arrayList1 = new ArrayList();
    29. }
    30. }
    31. class A{}
    32. //class B{}
    33. class B extends A{}
    34. class Pig{
    35. E e;
    36. public Pig(E e) {
    37. this.e = e;
    38. }
    39. public void f(){
    40. System.out.println(e.getClass());
    41. }
    42. }
    43. 4.泛型经典练习题

      1. package com.feiyang.basic14;
      2. /**
      3. * @author:飞扬
      4. * @公众hao:程序员飞扬
      5. * @description:生日日期类
      6. */
      7. public class MyDate implements Comparable{
      8. private int year;
      9. private int month;
      10. private int day;
      11. public MyDate(int year, int month, int day) {
      12. this.year = year;
      13. this.month = month;
      14. this.day = day;
      15. }
      16. public int getYear() {
      17. return year;
      18. }
      19. public void setYear(int year) {
      20. this.year = year;
      21. }
      22. public int getMonth() {
      23. return month;
      24. }
      25. public void setMonth(int month) {
      26. this.month = month;
      27. }
      28. public int getDay() {
      29. return day;
      30. }
      31. public void setDay(int day) {
      32. this.day = day;
      33. }
      34. @Override
      35. public String toString() {
      36. return "MyDate{" +
      37. "year=" + year +
      38. ", month=" + month +
      39. ", day=" + day +
      40. '}';
      41. }
      42. //把对日期的排序抽取出来放到MyDate类
      43. @Override
      44. public int compareTo(MyDate o) {
      45. int yearMinus = this.year - o.getYear();
      46. if(yearMinus !=0){
      47. return yearMinus;
      48. }
      49. int monthMinus = this.month - o.getMonth();
      50. if(monthMinus !=0){
      51. return monthMinus;
      52. }
      53. return this.day - o.getDay();
      54. }
      55. }
      56. package com.feiyang.basic14;
      57. /**
      58. * @author:程序员飞扬
      59. * @公众hao:程序员飞扬
      60. * @description:雇员类
      61. */
      62. public class Employee {
      63. private String name;
      64. private Double sal;
      65. private MyDate birthday;
      66. public Employee(String name, Double sal, MyDate birthday) {
      67. this.name = name;
      68. this.sal = sal;
      69. this.birthday = birthday;
      70. }
      71. public String getName() {
      72. return name;
      73. }
      74. public void setName(String name) {
      75. this.name = name;
      76. }
      77. public Double getSal() {
      78. return sal;
      79. }
      80. public void setSal(Double sal) {
      81. this.sal = sal;
      82. }
      83. public MyDate getBirthday() {
      84. return birthday;
      85. }
      86. public void setBirthday(MyDate birthday) {
      87. this.birthday = birthday;
      88. }
      89. @Override
      90. public String toString() {
      91. return "Employee{" +
      92. "name='" + name + '\'' +
      93. ", sal=" + sal +
      94. ", birthday=" + birthday +
      95. '}';
      96. }
      97. }
      98. package com.feiyang.basic14;
      99. import java.util.ArrayList;
      100. import java.util.Comparator;
      101. /**
      102. * @author:程序员飞扬
      103. * @公众hao:程序员飞扬
      104. * @description:泛型案例
      105. */
      106. public class GenericExercise02 {
      107. public static void main(String[] args) {
      108. ArrayList employees = new ArrayList();
      109. employees.add(new Employee("alice",2000.00,new MyDate(1980,10,21)));
      110. employees.add(new Employee("bob",1800.00,new MyDate(2002,6,18)));
      111. employees.add(new Employee("alice",3500.00,new MyDate(1980,10,22)));
      112. employees.sort(new Comparator() {
      113. @Override
      114. public int compare(Employee o1, Employee o2) {
      115. int i = o1.getName().compareTo(o2.getName());
      116. if(i != 0 ){
      117. return i;
      118. }
      119. int i1 = o1.getBirthday().compareTo(o2.getBirthday());
      120. return i1;
      121. }
      122. });
      123. //lambda写法
      124. employees.sort((o1, o2) -> {
      125. int i = o1.getName().compareTo(o2.getName());
      126. if(i != 0 ){
      127. return i;
      128. }
      129. int i1 = o1.getBirthday().compareTo(o2.getBirthday());
      130. return i1;
      131. });
      132. employees.forEach(employee -> System.out.println(employee));
      133. }
      134. }

      打印输出:

      Employee{name='alice', sal=2000.0, birthday=MyDate{year=1980, month=10, day=21}}

      Employee{name='alice', sal=3500.0, birthday=MyDate{year=1980, month=10, day=22}}

      Employee{name='bob', sal=1800.0, birthday=MyDate{year=2002, month=6, day=18}}

      四、自定义泛型

      1.自定义泛型类

      1. package com.feiyang.basic14;
      2. /**
      3. * @author:飞扬
      4. * @公众hao:程序员飞扬
      5. * @description:自定义泛型类
      6. */
      7. public class CustomGeneric_ {
      8. public static void main(String[] args) {
      9. }
      10. }
      11. /**
      12. * 1.Tiger后面有泛型,所以我们把Tiger成为自定义泛型类
      13. * 2. T,R,M是泛型的标识类,一般是单个大写字母
      14. * 3. 泛型标识符可以有多个
      15. * 4. 普通成员可以使用泛型(属性,方法)
      16. * 5,使用泛型的数据不能初始化
      17. * @param
      18. * @param
      19. * @param
      20. */
      21. class Tiger{
      22. String name;
      23. T t; //属性使用泛型
      24. R r;
      25. M m;
      26. //T[] tarr = new T[8]; //不可以,因为数组在 new时不能确定T的类型,所有不能开辟内存空间
      27. //1. 静态和类相关,在类加载时对象还未创建
      28. //2. 所以静态方法和静态属性使用了泛型,JVM就无法完成初始化
      29. //static R r2;
      30. //public static void m1(M m){
      31. //
      32. //}
      33. public Tiger(String name, T t, R r, M m) { //构造器使用泛型
      34. this.name = name;
      35. this.t = t;
      36. this.r = r;
      37. this.m = m;
      38. }
      39. }

      案例1

      1. package com.feiyang.basic14;
      2. /**
      3. * @author:飞扬
      4. * @公众hao:程序员飞扬
      5. * @description:自定义泛型类
      6. */
      7. public class CustomGeneric_ {
      8. public static void main(String[] args) {
      9. Tiger g = new Tiger<>("john");
      10. g.setT(10.9);//OK
      11. //g.setT("yy");//错误,类型不对
      12. System.out.println(g);
      13. Tiger g2 = new Tiger("john~~");//OK,默认T=Object,R=Object,M=Object
      14. g2.setT("yy");//OK,因为此时T=Object,而"yy"=String,是Object的子类
      15. System.out.println(g2);
      16. }
      17. }
      18. /**
      19. * 1.Tiger后面有泛型,所以我们把Tiger成为自定义泛型类
      20. * 2. T,R,M是泛型的标识类,一般是单个大写字母
      21. * 3. 泛型标识符可以有多个
      22. * 4. 普通成员可以使用泛型(属性,方法)
      23. * 5,使用泛型的数据不能初始化
      24. * @param
      25. * @param
      26. * @param
      27. */
      28. class Tiger{
      29. String name;
      30. T t; //属性使用泛型
      31. R r;
      32. M m;
      33. //T[] tarr = new T[8]; //不可以,因为数组在 new时不能确定T的类型,所有不能开辟内存空间
      34. //1. 静态和类相关,在类加载时对象还未创建
      35. //2. 所以静态方法和静态属性使用了泛型,JVM就无法完成初始化
      36. //static R r2;
      37. //public static void m1(M m){
      38. //
      39. //}
      40. public Tiger(String name, T t, R r, M m) { //构造器使用泛型
      41. this.name = name;
      42. this.t = t;
      43. this.r = r;
      44. this.m = m;
      45. }
      46. public Tiger(String john) {
      47. }
      48. public String getName() {
      49. return name;
      50. }
      51. public void setName(String name) {
      52. this.name = name;
      53. }
      54. public T getT() {
      55. return t;
      56. }
      57. public void setT(T t) {
      58. this.t = t;
      59. }
      60. public R getR() {
      61. return r;
      62. }
      63. public void setR(R r) {
      64. this.r = r;
      65. }
      66. public M getM() {
      67. return m;
      68. }
      69. public void setM(M m) {
      70. this.m = m;
      71. }
      72. @Override
      73. public String toString() {
      74. return "Tiger{" +
      75. "name='" + name + '\'' +
      76. ", t=" + t +
      77. ", r=" + r +
      78. ", m=" + m +
      79. '}';
      80. }
      81. }

      输出:

      Tiger{name='null', t=10.9, r=null, m=null}

      Tiger{name='null', t=yy, r=null, m=null}

      2.自定义泛型接口

      1. package com.feiyang.basic14;
      2. /**
      3. * @author:飞扬
      4. * @公众hao:程序员飞扬
      5. * @description:
      6. */
      7. public class CustomInterfaceGeneric_ {
      8. }
      9. interface IUsb{
      10. //普通方法中可以使用接口泛型
      11. R get(U u);
      12. void hi(R r);
      13. void run(R r1,R r2,U u1,U u2);
      14. //在jdk8中,可以在接口中使用默认方法,也是可以使用泛型
      15. default R method(U u){
      16. return null;
      17. }
      18. /**
      19. * 泛型接口使用说明:
      20. * 1. 接口中,静态成员不能使用泛型
      21. */
      22. int n = 10;
      23. //U name;//静态成员不能使用泛型
      24. }
      25. //在继承接口时,指定泛型接口的类型
      26. interface IA extends IUsb{
      27. }
      28. //当我们继承IA接口时,因为IA接口继承IUsb接口时指定了U为String,R为Double,
      29. //所以重写IUsb接口的方法时,用String替换了U,用Double替换了R。
      30. class AA implements IA{
      31. @Override
      32. public Double get(String s) {
      33. return null;
      34. }
      35. @Override
      36. public void hi(Double aDouble) {
      37. }
      38. @Override
      39. public void run(Double r1, Double r2, String u1, String u2) {
      40. }
      41. }
      42. //在实现接口时直接指定泛型接口的类型
      43. //给U指定Integer,给R指定Float
      44. //所以当我们实现IUsb接口时,会用Integer替换U,用Float替换R
      45. class BB implements IUsb{
      46. @Override
      47. public Float get(Integer integer) {
      48. return null;
      49. }
      50. @Override
      51. public void hi(Float aFloat) {
      52. }
      53. @Override
      54. public void run(Float r1, Float r2, Integer u1, Integer u2) {
      55. }
      56. }

      3.自定义泛型方法

      自定义泛型方法练习

      1. package com.feiyang.basic14;
      2. /**
      3. * @author:飞扬
      4. * @公众hao:程序员飞扬
      5. * @description:
      6. */
      7. public class CustomMethodGenericExercise {
      8. public static void main(String[] args) {
      9. Apple apple = new Apple<>();
      10. apple.fly(10);
      11. apple.fly(new Dog2());
      12. }
      13. }
      14. class Dog2{}
      15. class Apple{
      16. public void fly(E e){
      17. System.out.println(e.getClass().getSimpleName());
      18. }
      19. //错误,下面的方法并不是泛型方法,只是想使用类声明的泛型,然而类并没有声明泛型U
      20. //public void eat(U u){}
      21. //使用了泛型类声明的泛型M
      22. public void rnn(M m){}
      23. }

      输出:

      Integer

      Dog2

      五、泛型的继承和通配符

      1. package com.feiyang.basic14;
      2. import java.util.ArrayList;
      3. import java.util.List;
      4. /**
      5. * @author:飞扬
      6. * @公众hao:程序员飞扬
      7. * @description:
      8. */
      9. public class GenericExtends {
      10. public static void main(String[] args) {
      11. Object xx = new String("xx");//这样可以
      12. List list = new ArrayList();//可以,多态的体现
      13. //List list0 = new ArrayList();//不可以,泛型不具有继承性
      14. //举例说明几个方法的使用
      15. List list1 = new ArrayList();
      16. List list2 = new ArrayList();
      17. List list3 = new ArrayList();
      18. List list4 = new ArrayList();
      19. List list5 = new ArrayList();
      20. //List
      21. printCollection1(list1);
      22. printCollection1(list2);
      23. printCollection1(list3);
      24. printCollection1(list4);
      25. printCollection1(list5);
      26. //List
      27. // printCollection2(list1);//×
      28. // printCollection2(list2);//×
      29. // printCollection2(list3);//√
      30. // printCollection2(list4);//√
      31. // printCollection2(list5);//√
      32. //List
      33. // printCollection3(list1);//√
      34. // printCollection3(list2);//×
      35. // printCollection3(list3);//√
      36. // printCollection3(list4);//×
      37. // printCollection3(list5);//×
      38. }
      39. //几个方法说明:
      40. //List表示任意的泛型类型都可以接受
      41. public static void printCollection1(List c){
      42. for (Object o : c) {
      43. System.out.println(o);
      44. }
      45. }
      46. //List表示上限,可以接受AAA或AAA的子类
      47. public static void printCollection2(List c){
      48. for (Object o : c) {
      49. System.out.println(o);
      50. }
      51. }
      52. //List表示下限,可以接受AAA类或AAA类的父类
      53. public static void printCollection3(Listsuper AAA> c){
      54. for (Object o : c) {
      55. System.out.println(o);
      56. }
      57. }
      58. }
      59. class AAA{
      60. }
      61. class BBB extends AAA{
      62. }
      63. class CCC extends BBB{
      64. }
      65. 六、泛型作业(练习)

        1. package com.feiyang.basic14;
        2. /**
        3. * @author:飞扬
        4. * @公众hao:程序员飞扬
        5. * @description:
        6. */
        7. public class User {
        8. private int id;
        9. private int age;
        10. private String name;
        11. public User() {
        12. }
        13. public User(int id, int age, String name) {
        14. this.id = id;
        15. this.age = age;
        16. this.name = name;
        17. }
        18. public int getId() {
        19. return id;
        20. }
        21. public void setId(int id) {
        22. this.id = id;
        23. }
        24. public int getAge() {
        25. return age;
        26. }
        27. public void setAge(int age) {
        28. this.age = age;
        29. }
        30. public String getName() {
        31. return name;
        32. }
        33. public void setName(String name) {
        34. this.name = name;
        35. }
        36. @Override
        37. public String toString() {
        38. return "User{" +
        39. "id=" + id +
        40. ", age=" + age +
        41. ", name='" + name + '\'' +
        42. '}';
        43. }
        44. }
        45. package com.feiyang.basic14;
        46. import org.junit.jupiter.api.Test;
        47. import java.util.*;
        48. /**
        49. * @author:飞扬
        50. * @公众hao:程序员飞扬
        51. * @description:泛型作业练习
        52. */
        53. public class HomeWork01 {
        54. public static void main(String[] args) {
        55. }
        56. @Test
        57. public void testList(){
        58. DAO dao = new DAO<>();
        59. dao.save("01",new User(1,10,"tom"));
        60. dao.save("02",new User(2,15,"rose"));
        61. dao.save("03",new User(3,18,"jack"));
        62. //返回所有对象
        63. List list = dao.list();
        64. System.out.println(list);
        65. //更新
        66. dao.update("03",new User(4,20,"bella"));
        67. List list2 = dao.list();
        68. System.out.println(list2);
        69. //删除
        70. dao.delete("01");
        71. List list3 = dao.list();
        72. System.out.println(list3);
        73. //根据id获得
        74. System.out.println("02===" + dao.get("02"));
        75. }
        76. }
        77. class DAO {
        78. private Map map = new HashMap<>();
        79. public T get(String id){
        80. return map.get(id);
        81. }
        82. public void update(String id,T entity){
        83. map.put(id,entity);
        84. }
        85. //返回map中存放的所有T对象
        86. public List list(){
        87. List list = new ArrayList();
        88. Set keySet = map.keySet();
        89. for (String key : keySet) {
        90. list.add(get(key));
        91. }
        92. return list;
        93. }
        94. public void save(String id,T entity){
        95. map.put(id,entity);
        96. }
        97. public void delete(String id){
        98. map.remove(id);
        99. }
        100. }

      66. 相关阅读:
        并发线程特性-可见性和有序性
        Java开发学习(二十七)----SpringMVC之Rest风格解析及快速开发
        理解http中cookie!C/C++实现网络的HTTP cookie
        python实现Map+函数式接口替换多级if-else结构
        基于springboot,vue停车管理系统
        数据分析方法总结
        轻松驾驭!Prometheus 如何监控指标,快速定位故障
        springboot 链接doris 配置
        教你自己写Arcpy批处理程序
        4.git本地仓库操作(操作命令)
      67. 原文地址:https://blog.csdn.net/lu_xin5056/article/details/126193147
        • 最新文章
        • 攻防演习之三天拿下官网站群
          数据安全治理学习——前期安全规划和安全管理体系建设
          企业安全 | 企业内一次钓鱼演练准备过程
          内网渗透测试 | Kerberos协议及其部分攻击手法
          0day的产生 | 不懂代码的"代码审计"
          安装scrcpy-client模块av模块异常,环境问题解决方案
          leetcode hot100【LeetCode 279. 完全平方数】java实现
          OpenWrt下安装Mosquitto
          AnatoMask论文汇总
          【AI日记】24.11.01 LangChain、openai api和github copilot
        • 热门文章
        • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
          奉劝各位学弟学妹们,该打造你的技术影响力了!
          五年了,我在 CSDN 的两个一百万。
          Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
          面试官都震惊,你这网络基础可以啊!
          你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
          心情不好的时候,用 Python 画棵樱花树送给自己吧
          通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
          13 万字 C 语言从入门到精通保姆级教程2021 年版
          10行代码集2000张美女图,Python爬虫120例,再上征途
        Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
        正则表达式工具 cron表达式工具 密码生成工具

        京公网安备 11010502049817号