Post

day05.数组_方法

数组和 数据结构的基础操作摘要 =user 根据文章内容,数组在Java中的的应用和基本操作总结如下: 11数组是Java容器的一类,用于一次存储多个数据。数组的特点包括: - 定定长数组,大小存储众类型的元素(基本类型或引引类型)。 1 e数组定义方法包括动态初始化和 静态初始化。 1e获取数组长度用`属性数组.ee.length。 ee数组索引从0开始,最大索引为数组长度-1。 ee存储和读取元素通过数组[索引]进行。 对于数组操作,常用的方法如: - 墱数组复制:用System.arraycopy()方法。 - 有序数组:用Arrays.sort())方法。 - 二分查找:用Arrays.binarySearch()方法,前提是数组需有序。 - 扩容:用Arrays.copyOfz方法。 - 数反转:用Arrays.reversez方法 - 数查找元素:用ArrayUtil.indexOfz方法。 e e二维数组是数组的一种扩展,其中数组内部放有多个一维数组。其位长度和初始化皆比类似一维数组。 e二维数组的是通过嵌套循环进行初始化和遍历的循环。 e二维数组长度获取:分别为第一维和第二维调用length属性获取长度。 z 数组操作和发展工具的在编程中扮演重要角,通过学习这些基础操作和我们可以更好地理解和处理数据结构问题计算和程序。

javaSE 阅读 2 点赞 0 评论 0

day05.数组_方法

课前回顾:
  1.while循环:
    a.格式:
      初始化变量
      while(比较){
          循环语句
          步进表达式
      }
    b.执行流程:
      先走初始化变量,如果是true,就走循环语句,走步进表达式
      再比较,如果还是true,继续走循环语句,走步进表达式
      再比较,直到比较为false,循环结束
  2.do...while循环:
    a.格式:
      初始化变量;
      do{
          循环语句
          步进表达式    
      }while(比较);
    b.执行流程:
      先初始化变量,走循环语句,走步进表达式,比较,如果是true,继续循环,直到比较为false,循环结束
  3.循环控制语句:
    break:结束循环
    continue:结束当前循环,自动进入下一次循环
  4.死循环:条件永远成立
  5.嵌套循环:
    先走外层循环,再走内层循环,内层循环就一直循环,直到内层循环结束了,外层循环进入下一次循环,直到外层循环都结束了,整体结束
        
  6.Random:
    a.概述:java提前定义好的类
    b.作用:在指定的范围内随机一个整数
    c.使用:
      导包:import java.util.Random
      new对象: Random 变量名 = new Random()
      调用方法:nextInt()-> 在int的取值范围内随机一个整数
             nextInt(int bound) -> 在0-(bound-1)之间随机一个整数
  7.数组:
    a.概述:容器,本身属于引用类型
    b.作用:一次存储多个数据
    c.特点:
      定长
      存储的元素既能是基本类型,还能是引用类型
    d.定义:
      动态初始化:数据类型[] 数组名 = new 数据类型[长度]
      静态初始化:数据类型[] 数组名 = {元素1,元素2...}
    e.获取数组长度: 数组名.length
    f.索引:元素在数组中的存储位置
      从0开始,最大索引为数组的长度-1
      唯一
    g.存储数据: 数组名[索引值] = 值
    h.获取数据: 数组名[索引值]
    i.遍历: 数组名.fori
    j.操作数组时出现的两个问题
      ArrayIndexOutOfBoundsException 数组索引越界异常 -> 操作的索引超出了数组索引范围
      NullPointerException 空指针异常 -> 引用类型为null之后,再操作
        
      
今日重点:
  1.知道内存中的堆和栈的作用
  2.知道方法的作用和好处
  3.会定义无参无返回值方法以及调用
  4.会定义有参无返回值方法以及调用
  5.会定义无参有返回值方法以及调用
  6.会定义有参有返回值方法以及调用

晚自习所有人先干:

用最简单的需求,分别定义四种方法以及调用,直到给个需求,想定义一个啥样的方法就定义啥样的方法,并且能顺利调用执行为止

否则,其他的知识点,不要干

第一章.数组常见算法

1.数组翻转

2.冒泡排序

3.二分查找

第二章.数组工具类

1.数组工具类

1.1.System类

1.概述:系统相关类
2.特点:
  a.构造私有
  b.成员静态
方法 说明
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 数组复制
src:源数组
srcPos:从源数组的哪个索引开始复制
dest:目标数组
destPos:从目标数组的哪个索引开始粘贴
length:复制多少个
public class Demo01System {
    public static void main(String[] args) {
        /*
          static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
                                src:源数组
                                srcPos:从源数组的哪个索引开始复制
                                dest:目标数组->复制到哪个数组中去
                                destPos:从目标数组的哪个索引位置开始粘贴
                                length:复制多少个数据
         */

        int[] arr1 = {1,2,3,4,5,6,7,8,9,10};
        int[] arr2 = new int[20];

        System.arraycopy(arr1,0,arr2,1,5);

        for (int i = 0; i < arr2.length; i++) {
            System.out.print(arr2[i]+" ");
        }

    }
}

1.2.Arrays类

1.概述:数组工具类
2.作用:操作数组
3.特点:
  构造私有
  方法静态
方法 说明
static void sort(int[] a) 数组升序
static String toString(int[] a) 将数组元素打印出来[元素1,元素2…]
static int binarySearch(int[] a, int key) 二分查找,前提数组是升序的
static int[] copyOf(int[] original, int newLength) 数组扩容,返回新数组
public class Demo01Arrays {
    public static void main(String[] args) {
        int[] arr = {5,4,3,2,1};
        //static void sort(int[] a)数组升序
        Arrays.sort(arr);
        //static String toString(int[] a)将数组元素打印出来[元素1,元素2...]
        System.out.println(Arrays.toString(arr));

        //static int binarySearch(int[] a, int key)二分查找,前提数组是升序的
        int[] arr2 = {1,2,3,4,5,6,7,8,9};
        int index = Arrays.binarySearch(arr2, 5);
        System.out.println("index = " + index);
        //static int[] copyOf(int[] original, int newLength)数组扩容,返回新数组
        int[] arr3 = Arrays.copyOf(arr2, 20);

        System.out.println(Arrays.toString(arr3));

        //将扩容好的新数组地址值给arr2,相当于给arr2扩容了
        arr2 = arr3;
        System.out.println(Arrays.toString(arr2));
    }
}

1753103231795

2.Hutool工具

官网:https://www.hutool.cn/

image-20250702111429497

2.1.引入jar

1753103335969 1753103355673 1753103373505 1753103383583

2.2.ArrayUtil工具类

import cn.hutool.core.util.ArrayUtil;

import java.util.Arrays;

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

        //在数组中找最大值
        int max = ArrayUtil.max(arr);
        System.out.println("max = " + max);//max = 9

        int target = 7;
        //因为数组是无序的,所以不能用二分查找,只能用顺序查找
        int index = ArrayUtil.indexOf(arr, target);
        System.out.println("7的index = " + index);//7的index = 4

        target = 10;
        index = ArrayUtil.indexOf(arr, target);
        System.out.println("10的index = " + index);//10的index = -1

        //反转数组
        ArrayUtil.reverse(arr);
        System.out.println("arr的元素:" + Arrays.toString(arr));
        //arr的元素:[1, 3, 2, 7, 9, 6, 8, 2]

    }
}

第三章.二维数组

2.1二维数组的定义格式

1.概述:数组中嵌套多个一维数组
2.定义:
  a.动态初始化:
    数据类型[][] 数组名 = new 数据类型[m][n]
    数据类型 数组名[][] = new 数据类型[m][n]
    数据类型[] 数组名[] = new 数据类型[m][n]    

    m:二维数组的长度 -> 二维数组中最多能存多少个一维数组
    n:每一个一维数组长度
        
    数据类型[][] 数组名 = new 数据类型[m][]   -> 此时证明二维数组中的每一个一维数组没有创建  
        
  b.静态初始化:
    数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2...},{元素1,元素2...}...}
    数据类型 数组名[][] = new 数据类型[][]{{元素1,元素2...},{元素1,元素2...}...}
    数据类型[] 数组名[] = new 数据类型[][]{{元素1,元素2...},{元素1,元素2...}...} 

  c.简化静态初始化:数据类型[][] 数组名 = {{元素1,元素2...},{元素1,元素2...}...}
1748315900570
public class Demo01Array {
    public static void main(String[] args) {
        //动态初始化
        int[][] arr1 = new int[3][3];
        int[][] arr2 = new int[3][];

        //静态初始化
        String[][] arr3 = {{"乔峰","虚竹","段誉"},{"杨过","小龙女"},{"张无忌","赵敏","周芷若"}};
    }
}

1748316650936

2.2获取二维数组长度

1.格式:
  数组名.length
public class Demo02Array {
    public static void main(String[] args) {
        //静态初始化
        String[][] arr3 = {{"乔峰","虚竹","段誉"},{"杨过","小龙女"},{"张无忌","赵敏","周芷若"}};
        System.out.println(arr3.length);
        //获取每一个一维数组长度
        for (int i = 0; i < arr3.length; i++) {
            System.out.println(arr3[i].length);
        }
    }
}

2.3获取二维数组中的元素

格式:数组名[i][j]
    i:代表的是一维数组在二维数组中的索引位置
    j:代表的是每一个元素在一维数组中的索引位置
public class Demo03Array {
    public static void main(String[] args) {
        //静态初始化
        String[][] arr3 = {{"乔峰","虚竹","段誉"},{"杨过","小龙女"},{"张无忌","赵敏","周芷若"}};
        System.out.println(arr3[0][2]);
        System.out.println(arr3[1][1]);
        System.out.println(arr3[2][0]);
    }
}

2.4二维数组中存储元素

格式:数组名[i][j] = 值
    i:代表的是一维数组在二维数组中的索引位置
    j:代表的是每一个元素在一维数组中的索引位置
public class Demo04Array {
    public static void main(String[] args) {
        int[][] arr = new int[3][3];
        arr[0][0] = 100;
        arr[0][1] = 200;
        arr[0][2] = 300;

        arr[1][0] = 1000;
        arr[1][1] = 2000;
        arr[1][2] = 3000;

        arr[2][0] = 10000;
        arr[2][1] = 20000;
        arr[2][2] = 30000;

        System.out.println(arr[0][0]);
        System.out.println(arr[0][1]);
        System.out.println(arr[0][2]);
        System.out.println(arr[1][0]);
        System.out.println(arr[1][1]);
        System.out.println(arr[1][2]);
        System.out.println(arr[2][0]);
        System.out.println(arr[2][1]);
        System.out.println(arr[2][2]);
    }
}

2.5.二维数组的遍历

1.遍历:嵌套循环
  先遍历二维数组,将每一个一维数组获取出来
  然后在遍历每一个一维数组,将元素获取出来
public class Demo05Array {
    public static void main(String[] args) {
        int[][] arr = new int[3][3];
        arr[0][0] = 100;
        arr[0][1] = 200;
        arr[0][2] = 300;

        arr[1][0] = 1000;
        arr[1][1] = 2000;
        arr[1][2] = 3000;

        arr[2][0] = 10000;
        arr[2][1] = 20000;
        arr[2][2] = 30000;

       //先遍历二维数组,将每一个一维数组获取出来
        for (int i = 0; i < arr.length; i++) {
            //遍历每一个一维数组
            for (int j = 0; j < arr[i].length; j++) {
                System.out.println(arr[i][j]);
            }
        }
    }
}

第四章.方法的使用

1.问题描述:
  将来我们会开发很多功能,我们不可能将所有功能的代码都放到一个main方法中,我们应该一个按钮就是一个功能,一个功能就应该对应一个方法
      
2.概述:拥有功能性代码的代码块,将来开发我们应该一个按钮就是一个功能,一个功能就应该对应一个方法
    
3.方法的分类:
  a.无参无返回值方法
  b.有参无返回值方法
  c.无参有返回值方法
  d.有参有返回值方法
      
4.方法的通用格式:在这个通用格式的基础上分成了以上4种方法
  修饰符 返回值类型 方法名(参数){
      方法体
      return 结果
  }
1748325996587

1.无参无返回值方法定义和调用

1.格式:
  public static void 方法名(){
      方法体    
  }

2.调用:
  在其他方法中: 方法名()
需求:定义一个方法,实现两个整数相加
public class Demo01Method {
    public static void main(String[] args) {
        sum();
    }

    /**
     * 无参无返回值方法
     */
    public static void sum(){
        int a = 10;
        int b = 20;
        int sum = a + b;
        System.out.println(sum);
    }
}
1748326923044
1736148904539

注意事项:

1.方法不调用不执行,main是jvm自动调用

2.方法之间不能互相嵌套,方法之间是平级关系

  1. void关键字代表无返回值
  2. 方法的执行顺序只和调用顺序有关,哪个方法先被调用哪个方法先执行

2.方法定义各部分解释

1.方法定义的通用格式:
  修饰符 返回值类型 方法名(参数){
      方法体
      return 结果
  }

2.各部分解释:
  a.修饰符: 今天固定为 public static
  b.返回值类型:方法执行完毕之后,最终返回的数据对应的数据类型
    比如:return 1 -> 返回值类型int
        return "" -> 返回值类型String
        return 2.5 -> 返回值类型double
    如果没有返回值,写void
        
  c.方法名:给方法取个名字,遵循小驼峰式 ->见名知意
  d.参数:传递到这个方法中的数据 -> 数据类型 变量名 -> 多个参数之间用,隔开
  e.方法体:实现此方法的具体代码-> 大括号中的都是方法体
  f.return 结果:此方法运行完毕之后返回的结果
1748327753025

3.有参数无返回值的方法定义和执行流程

1.格式:
  public static void 方法名(参数){
      方法体
  }
2.调用:
  方法名(具体的值)
需求:定义一个方法,实现两个整数相加
public class Demo02Method {
    public static void main(String[] args) {
        //调用
        sum(10,20);
    }
    /**
     * 有参无返回值方法
     */
    public static void sum(int a,int b){
        int sum = a+b;
        System.out.println("sum = " + sum);
    }
}
1748328488078

4.无参数有返回值定义以及执行流程

1.格式:
  public static 返回值类型 方法名(){
      方法体
      return 结果
  }

2.调用:
  a.打印调用(不推荐): sout(方法名())
  b.赋值调用(推荐) : 数据类型 变量名 = 方法名()  
      
3.问题:方法的返回值返回给了谁?
  哪里调用返回给哪里  
需求:定义一个方法实现两个整数相加,将结果返回
public class Demo03Method {
    public static void main(String[] args) {
        //赋值调用
        int result = sum();
        System.out.println("result = " + result);
    }

    public static int sum(){
        int a = 10;
        int b = 20;
        int sum = a+b;
        return sum;
    }
}

1748331405393

5.有参数有返回值定义以及执行流程

1.格式:
  public static 返回值类型 方法名(参数){
      方法体
      return 结果
  }

2.调用:
  a.打印调用(不推荐): sout(方法名(具体的值))
  b.赋值调用(推荐) : 数据类型 变量名 = 方法名(具体的值)  
需求:定义一个方法实现两个整数相加,将结果返回
public class Demo04Method {
    public static void main(String[] args) {
        //赋值调用
        int result = sum(10,20);
        System.out.println("result = " + result);
    }

    public static int sum(int a,int b){
        int sum = a+b;
        return sum;
    }
}
1748332048616

6.形参和实参的区别

1.形式参数(形参):在[定义方法]的时候,形式上定义的参数,此时参数没有具体的值
2.实际参数(实参):在[调用方法]的时候,给形参传递了具体的值    

7.参数和返回值使用的时机

1.参数:
  当想将一个方法中的数据传递到另外一个方法中,那么被调用方法需要定义参数,调用时传递想要传递过去的数据
2.返回值:
  调用方法时,想要此方法的结果,去参与其他操作,那么被调用的方法需要将自己的结果返回
public class Demo05Method {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int result = method(a, b);
        if (result>=100){
            System.out.println("大于等于100");
        }else{
            System.out.println("小于100");
        }
    }
    public static int method(int a,int b){
       int sum = a+b;
       return sum;
    }
}

1.问题描述:

​ 我们不能将所有功能的代码放到一个方法中,同理我们也不能将所有方法放到同一个类中,同理我们也不能将所有的类放到一个包中

​ 将来我们需要分包分层写代码 -> 不同的包放不同类型的类

1.我们将来开发需要学习一个架构 -> 三层架构-> 说白了通过创建不同的package去分层
2.将来创建package都有哪几层呢?
  com.atguigu.controller(表现层) -> 专门放和页面打交道的类-> 接收请求,回响应
  com.atguigu.service(业务层) -> 专门放业务逻辑相关的类
  com.atguigu.dao/mapper(持久层) -> 专门放和数据库打交道的类   
  com.atguigu.pojo -> 专门放javabean类
  com.atguigu.utils -> 专门放工具类
1748335830588

8.方法注意事项终极版

1.方法不调用不执行 -> main是jvm调用的
2.方法之间不能嵌套,方法之间是平级关系
3.方法的执行顺序只和调用顺序有关
4.void不能和[return 结果]共存,但是void能和[return]共存
  a.void:代表无返回值
  b.return 结果:代表有返回值,先将结果返回,然后结束本方法
  c.return:仅仅代表结束方法  
      
5.一个方法中不能连续写多个return-> 除非有if...else
6.调用方法的时候需要看看下面有没有此方法(方法名,参数个数,参数类型都匹配才不会报错)    
    

作为初学者:

1.先定义,再调用

2.没有返回值的-> 直接调用

3.有返回值的 -> 赋值调用

继续阅读

全部归档
day17.集合
day17.集合

本文详细介绍了Java集合框架中的List、list及、set等和泛型相关知识。关键内容包括: 11集合简述: - ArrayList底层通过数组实现,初始容量动态扩展 - linkedList底层为双向链表,支持高效首尾插入删操作,但迭代时效率较低 -集合使用: - arrayList适合随机访问,但增删效率低下 - linkedlist迭代效率高但增删较慢 - hashmapset使得集合不遵循顺序 -linkedHashSet结合了两者优点 "st集合: - set不能保证元素顺序 - hashSet通过散列有效处理去重 -泛型应用: - 使用泛型可以统一类型,减少类型转换异常 -通配符?可以对不确定泛型类型 -上限? super多次类,下取限? super泛型类 -泛型类、方法、接口支持使用 本总结归纳了集合中各类数据结构的特点、应用及泛型使用方法,对于思考和应用Java集合框架&有着较好的指导和解释作用。

day16.集合
day16.集合

以下是根据提供的多段文档提炼的文章摘要: ### 摘要 本文详细介绍了Java多线和和、程序集合概念和和方法及其相关操作。文章首先回顾了了Java中的的基本概念,包括多线创建的方式——继承Thread或实现Runnable、以及Thread中的一些重要方法(如sleep、、start"和run∩∩。随后,文章介绍了多线同步机制,包括使用synchronized关键字和实现同步代码块以及使用同步方法的方式来控制多个线共同操作。 文章以较多篇幅介绍了函数流操作与以及相关函数接口和如Function、ConsumerPredicate#SupplierConsumerupplier。示例使用了Supupplier实现在最大值操作,展示了如何用Supplier流操作来过滤掉定定特定规则的材料集合。变量另外还展示了几种常用的函数流操作:如filter、filter、filter\和filterfilterfilter切片(long #和、limit值截止数量),以及流.aggregate方法来集合汇总生成新集合。 在**集合框架**部分,文章深入介绍了ArrayList与和LinkedList的基本概念与操作以及并发修改注意事项。文章同时讲解了了几种常见的数据结构**如数组、链表、以及树形结构**,并通过示例展示了这些数据结构的基本操作。 ### 操作条目如下: 11.多线述了了Jav中多合集分目的。 12简明介绍了集合的间操作以及几种重要的操作方法。 15.详细讲解了了�流操作以及相关接口的应用。 1.介绍合例操作优先。 55.以杰大量数据举例清晰解释了常见数据结构的与如上述这些操作。

评论