21.Arrays类

Arrays类

    • 1. 概述
    • 2. 常见方法
    • 3. sort 方法的自定义排序
    • 4. 代码示例
    • 5. 输出结果
    • 6. 注意事项

1. 概述

Arrays类是Java中的一个工具类,位于java.util包中。

它提供了一组静态方法,用于操作数组。通过Arrays类,我们可以对数组进行复制、填充、排序以及查找等常见操作。

Arrays类的方法主要包括以下几个方面:

  1. 数组拷贝:提供了copyOf()和copyOfRange()方法,用于将原数组复制到新数组中,并可以指定拷贝的范围。

  2. 数组填充:通过fill()方法,可以将数组中的所有元素填充为指定的值。

  3. 数组排序:使用sort()方法,可以对数组进行排序。sort()方法有两个版本,一个是使用默认规则进行排序,另一个是可以指定排序规则。

  4. 数组查找:提供了binarySearch()方法,使用二分查找法在数组中查找指定的元素。

2. 常见方法

方法功能
public static String toString(数组)将数组拼接成一个字符串
public static int binarySearch(数组,查找的元素)使用二分查找法在数组中查找元素
public static int[] copyOf(原数组,新数组长度)拷贝数组并指定新数组的长度
public static int[] copyOfRange(原数组,起始索引,结束索引)拷贝数组的指定范围到新数组中
public static void fill(数组,元素)将数组中的所有元素填充为指定元素
public static void sort(数组)使用默认规则对数组进行排序
public static void sort(数组,排序规则)使用指定规则对数组进行排序

注意:

  • public static int binarySearch(数组,查找的元素) : 二分查找法查找元素

    • 细节1:二分查找的前提:数组中的元素必须是有序的,且数组中的元素必须是升序的

    • 细节2:

      • 如果要查找的元素存在,则返回的是真实的索引值;

      • 如果要查找的元素不存在,则返回的是 -插入点 -1

      • -1的原因:如果此时,我们要查找数字0(假如0在数组中并不存在),那么如果返回的值是-插入点,那么则为-0;有的人认为-0等同于0,因此为避免这种情况出现,Java规定如果要查找的元素不存在,则返回的是 -插入点 -1

  • public static int[] copyOf(原数组,新数组长度) :拷贝数组

    • 细节:

      • 当新数组的长度小于原数组的长度时,会部分拷贝原数组的元素

      • 当新数组的长度等于原数组的长度时,会全部拷贝原数组的元素

      • 当新数组的长度大于原数组的长度时,会全部拷贝原数组的元素,剩余位置补上默认初始化(例如,int类型的数组剩余位置补0)

  • public static int[] copyOfRange(原数组,起始索引,结束索引) : 拷贝数组(指定范围)

    • 细节:

      • 包头不包尾,包左不包右
  • public static void sort(数组) :按照默认方式进行排序

    • 细节:

      • 默认情况下,给基本数据类型进行升序操作。底层使用的是快速排序
  • public static void sort(数组,排序规则) : 按照指定的规则排序

    • 参数一:要排序的数组

    • 参数二:排序的规则

    • 细节:

      • 只能给引用数据类型的数组进行排序,如果数组是基本数据类型的话,需要变成其对应的包装类

      • 第二个参数是一个接口,所以我们在调用方法的时候,需要传递这个接口的实现类对象,作为排序的规则。

      • 但是这个实现类一般只用使用一次,因此没有必要单独写一个类,直接采用匿名内部类的方法就可以了

  • 底层原理:利用插入排序 + 二分查找的方法进行排序的

    • 默认把 0 索引的数据作为有序序列,1索引及其以后得所有数据都作为无序序列。
    • 遍历无序序列,得到里面的每一个元素,把得到的元素往有序序列中插入,在插入时,是利用二分查找的方法确认该元素的插入点,然后拿着该元素与插入点的元素进行比较。(比较的方式与之前不同,该比较的方式是从前往后遍历),比较的规则是compare方法的方法体。
      • 如果方法的返回值是负数,拿着该元素继续跟前面的数据进行比较

      • 如果方法的返回值是正数,拿着该元素继续跟后面的数据进行比较

      • 如果方法的返回值是0,拿着该元素继续跟后面的数据进行比较

    • 直到能确定该元素的位置为止
  • compare方法的形参参数:

    • 参数一 o1:表示在无序序列中,遍历得到的每一个元素
    • 参数二 o2:有序序列中的元素
    • 返回值:
      • 负数:表示当前要插入的元素是小的,放前面

      • 正数:表示当前要插入的元素是大的,放后面

    • 0:表示当前要插入的元素跟该位置的元素是一样的,放后面
      • o1-o2:升序排列

      • o2-o1:降序排列

3. sort 方法的自定义排序

由于Arrays类是一个final类,无法被继承,因此不允许对sort()方法进行重写。

然而,如果想要实现自定义的排序逻辑,可以通过传递一个实现了Comparator接口的自定义比较器对象来调用sort()方法,这样可以指定排序时使用的比较规则。这种方式并不是重写,而是通过回调方法(Comparator接口中的compare()方法)来实现自定义的排序行为。

当我们调用Arrays.sort()方法时,根据传入的参数不同,会调用不同的重载方法。

  1. public static void sort(T[] a)

    • 功能:用于对传入的数组进行排序。
    • 参数:a是要排序的数组,类型为T[],表示一个指定元素类型的数组。
    • 排序规则:默认使用数组元素的自然顺序进行排序。如果数组中的元素是基本数据类型,会使用对应的包装类的自然顺序进行排序。
    • 返回值:无。
    • 示例:
      Integer[] numbers = {5, 2, 8, 1, 9};
      Arrays.sort(numbers);
      // 数组将被排序为:{1, 2, 5, 8, 9}
      
  2. public static void sort(T[] a, Comparator<? super T> c)

    • 功能:用于对传入的数组进行排序,使用自定义的排序规则。
    • 参数:
      • a是要排序的数组,类型为T[],表示一个指定元素类型的数组。
      • c是一个Comparator对象,用于定义元素的比较规则。
    • 排序规则:根据Comparator对象的定义进行排序。
    • 返回值:无。
    • 示例:
      String[] names = {"John", "Alice", "Bob", "David"};
      Arrays.sort(names, (s1, s2) -> s1.compareToIgnoreCase(s2));
      // 数组将被排序为:{"Alice", "Bob", "David", "John"}
      

4. 代码示例

package text.text02;

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

/*
Arrays类:
    public static String toString(数组)                            把数组拼接成一个字符串
    public static int binarySearch(数组,查找的元素)                 二分查找法查找元素
    细节1:二分查找的前提:数组中的元素必须是有序的,且数组中的元素必须是升序的
    细节2:如果要查找的元素存在,则返回的是真实的索引值
          如果要查找的元素不存在,则返回的是 -插入点-1
          -1的原因:如果此时,我们要查找数字0(假如0在数组中并不存在),那么如果返回的值是-插入点,那么则为-0;有的人认为-0等同于0,因此为避免这种情况出现,Java规定如果要查找的元素不存在,则返回的是 -插入点-1。

    public static int[] copyOf(原数组,新数组长度)                   拷贝数组
    细节:当新数组的长度小于原数组的长度时,会部分拷贝原数组的元素
         当新数组的长度等于原数组的长度时,会全部拷贝原数组的元素
         当新数组的长度大于原数组的长度时,会全部拷贝原数组的元素,剩余位置补上默认初始化(例如,int类型的数组剩余位置补0)

    public static int[] copyOfRange(原数组,起始索引,结束索引)         拷贝数组(指定范围)
    细节:包头不包尾,包左不包右

    public static void fill(数组,元素)                              填充数组

    public static void sort(数组)                                  按照默认方式进行排序
    细节:默认情况下,给基本数据类型进行升序操作。底层使用的是快速排序

    public static void sort(数组,排序规则)                          按照指定的规则排序
       参数一:要排序的数组
       参数二:排序的规则
       细节:只能给引用数据类型的数组进行排序,如果数组是基本数据类型的话,需要变成其对应的包装类
            第二个参数是一个接口,所以我们在调用方法的时候,需要传递这个接口的实现类对象,作为排序的规则。
            但是这个实现类一般只用使用一次,因此没有必要单独写一个类,直接采用匿名内部类的方法就可以了
       底层原理:利用插入排序 + 二分查找的方法进行排序的
       默认把 0 索引的数据作为有序序列,1索引及其以后得所有数据都作为无序序列。
       遍历无序序列,得到里面的每一个元素,把得到的元素往有序序列中插入,在插入时,是利用二分查找的方法确认该元素的插入点,然后拿着该元素与插入点的元素进行比较。(比较的方式与之前不同,该比较的方式是从前往后遍历),比较的规则是compare方法的方法体。
        如果方法的返回值是负数,拿着该元素继续跟前面的数据进行比较
        如果方法的返回值是正数,拿着该元素继续跟后面的数据进行比较
        如果方法的返回值是0,拿着该元素继续跟后面的数据进行比较
        直到能确定该元素的位置为止

        compare方法的形参参数:
        参数一 o1:表示在无序序列中,遍历得到的每一个元素
        参数二 o2:有序序列中的元素
        返回值:
        负数:表示当前要插入的元素是小的,放前面
        正数:表示当前要插入的元素是大的,放后面
        0:表示当前要插入的元素跟该位置的元素是一样的,放后面
        o1-o2:升序排列
        o2-o1:降序排列
 */
public class text16 {
    public static void main(String[] args) {
        int[] arr1 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        int[] arr2 = {10, 5, 3, 4, 7, 8, 2, 9, 1, 6, 0};

        //public static String toString(数组):把数组拼接成一个字符串
        System.out.println("===============  toString(数组):把数组拼接成一个字符串 ===============");
        String str1 = Arrays.toString(arr1);
        System.out.println(str1);     //[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        System.out.println();


        //public static int binarySearch(数组,查找的元素):二分查找法查找元素
        //细节1:二分查找的前提:数组中的元素必须是有序的,且数组中的元素必须是升序的
        //细节2:如果要查找的元素存在,则返回的是真实的索引值
        //      如果要查找的元素不存在,则返回的是 -插入点-1
        //-1的原因:如果此时,我们要查找数字0(假如0在数组中并不存在),那么如果返回的值是-插入点,那么则为-0;有的人认为-0等同于0,因此为避免这种情况出现,则Java规定如果要查找的元素不存在,则返回的是 -插入点-1。
        System.out.println("=============== binarySearch(数组,查找的元素):二分查找法查找元素  ===============");
        int int1 = Arrays.binarySearch(arr1, 5);
        int int2 = Arrays.binarySearch(arr1, 10);
        int int3 = Arrays.binarySearch(arr1, 15);
        System.out.println(int1);        //5
        System.out.println(int2);        //10
        System.out.println(int3);        //-12
        System.out.println();


        //public static int[] copyOf(原数组,新数组长度):拷贝数组
        //细节:当新数组的长度小于原数组的长度时,会部分拷贝原数组的元素
        //     当新数组的长度等于原数组的长度时,会全部拷贝原数组的元素
        //     当新数组的长度大于原数组的长度时,会全部拷贝原数组的元素,剩余位置补上默认初始化(例如,int类型的数组剩余位置补0)
        System.out.println("===============  copyOf(原数组,新数组长度):拷贝数组 ===============");
        int[] int4 = Arrays.copyOf(arr1, 6);
        int[] int5 = Arrays.copyOf(arr1, 11);
        int[] int6 = Arrays.copyOf(arr1, 20);
        System.out.println(Arrays.toString(int4));      //[0, 1, 2, 3, 4, 5]
        System.out.println(Arrays.toString(int5));      //[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        System.out.println(Arrays.toString(int6));      //[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0]
        System.out.println();


        //public static int[] copyOfRange(原数组,起始索引,结束索引):拷贝数组(指定范围)
        //细节:包头不包尾,包左不包右
        System.out.println("===============  copyOfRange(原数组,起始索引,结束索引):拷贝数组(指定范围) ===============");
        int[] int7 = Arrays.copyOfRange(arr1, 0, 10);
        int[] int8 = Arrays.copyOfRange(arr1, 0, 11);
        System.out.println(Arrays.toString(int7));    //[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
        System.out.println(Arrays.toString(int8));    //[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        System.out.println();


        //public static void fill(数组,元素):填充数组
        System.out.println("===============  fill(数组,元素):填充数组  ===============");
        Arrays.fill(arr1, 20);
        System.out.println(Arrays.toString(arr1));   //[20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20]
        System.out.println();


        //public static void sort(数组):按照默认方式进行排序
        //细节:默认情况下,给基本数据类型进行升序操作。底层使用的是快速排序
        System.out.println("=============== sort(数组):按照默认方式进行排序  ===============");
        Arrays.sort(arr2);
        System.out.println(Arrays.toString(arr2));   //[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        System.out.println();


        //public static void sort(数组,排序规则):按照指定的规则排序
        //参数一:要排序的数组
        //参数二:排序的规则
        //细节:只能给引用数据类型的数组进行排序,如果数组是基本数据类型的话,需要变成其对应的包装类
        //     第二个参数是一个接口,所以我们在调用方法的时候,需要传递这个接口的实现类对象,作为排序的规则。
        //     但是这个实现类一般只用使用一次,因此没有必要单独写一个类,直接采用匿名内部类的方法就可以了
        //底层原理:利用插入排序 + 二分查找的方法进行排序的
        //默认把 0 索引的数据作为有序序列,1索引及其以后得所有数据都作为无序序列。
        //遍历无序序列,得到里面的每一个元素,把得到的元素往有序序列中插入,在插入时,是利用二分查找的方法确认该元素的插入点,然后拿着该元素与插入点的元素进行比较。(比较的方式与之前不同,该比较的方式是从前往后遍历),比较的规则是compare方法的方法体。
        //如果方法的返回值是负数,拿着该元素继续跟前面的数据进行比较
        //如果方法的返回值是正数,拿着该元素继续跟后面的数据进行比较
        //如果方法的返回值是0,拿着该元素继续跟后面的数据进行比较
        //直到能确定该元素的位置为止
        System.out.println("=============== sort(数组,排序规则):按照指定的规则排序  ===============");
        Integer[] arr3 = {2, 3, 5, 6, 8, 9, 1, 0, 4, 10, 7};
        Arrays.sort(arr3, new Comparator<Integer>() {
            //compare方法的形参参数:
            //参数一 o1:表示在无序序列中,遍历得到的每一个元素
            //参数二 o2:有序序列中的元素
            //返回值:
            //负数:表示当前要插入的元素是小的,放前面
            //正数:表示当前要插入的元素是大的,放后面
            //0:表示当前要插入的元素跟该位置的元素是一样的,放后面
            //o1-o2:升序排列
            //o2-o1:降序排列
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1 - o2;
            }
        });
        System.out.println("升序排序:" + Arrays.toString(arr3));    //升序排序:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

        Arrays.sort(arr3, new Comparator<Integer>() {
            //compare方法的形参参数:
            //参数一 o1:表示在无序序列中,遍历得到的每一个元素
            //参数二 o2:有序序列中的元素
            //返回值:
            //负数:表示当前要插入的元素是小的,放前面
            //正数:表示当前要插入的元素是大的,放后面
            //0:表示当前要插入的元素跟该位置的元素是一样的,放后面
            //o1-o2:升序排列
            //o2-o1:降序排列
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;
            }
        });
        System.out.println("降序排序:" + Arrays.toString(arr3));    //降序排序:[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
    }
}

5. 输出结果

  • public static String toString(数组):把数组拼接成一个字符串
    在这里插入图片描述

  • public static int binarySearch(数组,查找的元素):二分查找法查找元素
    在这里插入图片描述

  • public static int[] copyOf(原数组,新数组长度):拷贝数组
    在这里插入图片描述

  • public static int[] copyOfRange(原数组,起始索引,结束索引):拷贝数组(指定范围)
    在这里插入图片描述

  • public static void fill(数组,元素):填充数组
    在这里插入图片描述

  • public static void sort(数组):按照默认方式进行排序
    在这里插入图片描述

  • public static void sort(数组,排序规则):按照指定的规则排序
    在这里插入图片描述

6. 注意事项

  1. Arrays类中的方法都是静态方法,无需实例化对象即可直接调用。

  2. Arrays类的方法通常针对数组进行操作,因此在使用这些方法之前,需要先创建合适的数组对象,并将数据存储在数组中。

  3. 使用Arrays.copyOf()Arrays.copyOfRange()方法时,要确保目标数组的长度足够存储源数组或指定的范围内的元素。否则,可能会出现ArrayIndexOutOfBoundsException错误。

  4. Arrays.toString()Arrays.deepToString()方法可以将数组转换为字符串,方便打印和调试。但需要注意,这些方法将直接使用数组的toString()方法来获取字符串表示形式,因此自定义的类需要重写toString()方法才能得到正确的输出。

  5. 当使用Arrays.sort()方法对数组进行排序时,需要注意数组元素的可比较性。如果数组元素是自定义的类对象,需要确保该类实现了Comparable接口,或者使用重载方法并传入自定义的Comparator对象来指定元素的比较规则。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/350156.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【第四天】蓝桥杯备战

题 1、求和2、天数3、最大缝隙 1、求和 https://www.lanqiao.cn/problems/1442/learning/ 解法&#xff1a;字符串方法的应用 import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scann…

MSG3D论文解读

论文在stgcn与sta-lstm基础上做的。下面讲一下里面的方法&#xff1a; 1.准备工作 符号。这里是对符号进行解释。 一个人体骨骼图被记为G(v,E) 图卷积&#xff1a; 图卷积定义 考虑一种常用于处理图像的标准卷积神经网络 (CNN)。输入是像素网格。每个像素都有一个数据值向…

kubeSphere DevOps自定义容器 指定nodejs版本

✨✨✨✨✨✨ &#x1f380;前言&#x1f381;基于内置镜像构建&#x1f381;把镜像添加基础容器中&#x1f381;检查容器是否配置成功&#x1f381;不生效的原因排查&#x1f381;按步骤执行如下命令 &#x1f380;前言 由于我本地的开发环境node是16.18.1,而自带容器node的版…

项目中遇到通过域名访问服务提示 Service name unknow

目录 项目中遇到通过域名访问服务提示 Service name unknow 1.问题描述2.问题原因3.解决思路4.解决方案文章所属专区 项目问题解决 1.问题描述 在CentOS 系统环境下 项目中遇到通过域名访问服务提示 Service name unknow,但是 网络是连通的 通过ping 和telnet都能够验证。 …

win10+elasticsearch8.12 安装教程

Elasticsearch是一种搜索引擎&#xff0c;本地安装完成之后&#xff0c;可使用其他编程语言&#xff08;例如python&#xff09;与elasticsearch建立连接&#xff0c;然后使用python脚本搜索elasticsearch中的数据 1下载 elasticsearch elasticsearch最新版官网下载链接 点击…

Pandas.DataFrame.product() 乘积(累乘积) 详解 含代码 含测试数据集 随Pandas版本持续更新

关于Pandas版本&#xff1a; 本文基于 pandas2.2.0 编写。 关于本文内容更新&#xff1a; 随着pandas的stable版本更迭&#xff0c;本文持续更新&#xff0c;不断完善补充。 传送门&#xff1a; Pandas API参考目录 传送门&#xff1a; Pandas 版本更新及新特性 传送门&…

让B端管理软件既美观又实用的解决方案来了

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验&#xff01;希望我的分享能帮助到您&#xff01;如需帮助可以评论关注私信我们一起探讨&#xff01;致敬感谢感恩&#xff01; 让B端管理软件既美观又实用的解决方案来了 在当今数字化时代&#xff0c;B端管理软件已…

Docker容器部署OpenCV,打造高效可移植的计算机视觉开发环境

推荐 海鲸AI-ChatGPT4.0国内站点&#xff1a;https://www.atalk-ai.com 前言 在计算机视觉领域&#xff0c;快速部署和测试算法是研究和开发的关键。OpenCV作为一个强大的开源计算机视觉库&#xff0c;广泛应用于各种图像处理和视频分析任务。然而&#xff0c;配置OpenCV环境可…

计算机毕业设计 | SpringBoot 求职招聘管理系统(附源码)

1&#xff0c;绪论 1.1 开发背景 高学历人群是网络求职者的主体&#xff0c;且结构趋向固定。而在疫情肆虐的今日&#xff0c;线上招聘成了越来越多企业和个人选择的方式。在疫情期间线下招聘转为线上招聘&#xff0c;是疫情防控的需要。不能否定的是新的招聘模式的出现一定会…

智慧应急消防柜的作用

在现代社会&#xff0c;科技的不断进步带来了许多便利与改变。智能化的产品不仅给我们的生活带来了便捷&#xff0c;也让我们对各个领域的发展有了更高的期待。而在这种场景下&#xff0c;智慧应急消防柜作为智慧城市新型基础设施的必备品&#xff0c;正逐渐受到更多关注。 智能…

《游戏-03_3D-开发》之—新输入系统人物移动攻击连击

本次修改unity的新输入输出系统。本次修改unity需要重启&#xff0c;请先保存项目&#xff0c; 点击加号起名为MyCtrl&#xff0c; 点击加号设置为一轴的&#xff0c; 继续设置W键&#xff0c; 保存 生成自动脚本&#xff0c; 修改MyPlayer代码&#xff1a; using UnityEngine;…

设计模式二(工厂模式)

本质&#xff1a;实例化对象不用new&#xff0c;用工厂代替&#xff0c;实现了创建者和调用者分离 满足&#xff1a; 开闭原则&#xff1a;对拓展开放&#xff0c;对修改关闭 依赖倒置原则&#xff1a;要针对接口编程 迪米特原则&#xff1a;最少了解原则&#xff0c;只与自己直…

DDPM的一点笔记

1 Title Denoising Diffusion Probabilistic Models&#xff08;Jonathan Ho、Ajay Jain、Pieter Abbeel&#xff09; 2 Conclusion This paper present high quality image synthesis results using diffusion probabilistic models, a class of latent variable models insp…

【Qt】—— Qt开发环境的搭建

目录 &#xff08;一&#xff09;Qt的开发⼯具概述 1.1 Qt Creator 1.2 Visual Studio 1.3 Eclipse &#xff08;二&#xff09;Qt SDK的下载和安装 2.1 QtSDK的下载 2.2 QtSDK的安装 2.3 验证QtSDK安装是否成功 2.4 Qt环境变量配置 &#xff08;一&#xff09;Qt的…

yolov8 opencv dnn部署 github代码

源码地址 本人使用的opencv c github代码,代码作者非本人 实现推理源码中作者的yolov8s.onnx 推理条件 windows 10 Visual Studio 2019 Nvidia GeForce GTX 1070 opencv4.7.0 (opencv4.5.5在别的地方看到不支持yolov8的推理&#xff0c;所以只使用opencv4.7.0) c部署 先将…

一、防御保护---信息安全概述

一、网络安全防御---信息安全概述 1.信息安全现状及挑战1.1 网络空间安全市场在中国&#xff0c;潜力无穷1.2 数字化时代威胁升级1.3 传统安全防护逐步失效1.4 安全风险能见度不足1.5 缺乏自动化防御手段1.6 网络安全监管标准愈发严苛 2.信息安全概述2.1 简介2.2 常见的网络安全…

分币不花,K哥带你白嫖海外代理 ip!

前言 近来&#xff0c;国内的数据采集环境越来越严峻&#xff0c;不是“非法入侵计算机信息系统”&#xff0c;就是“侵犯公民个人隐私信息”&#xff0c;一个帽子砸下来&#xff0c;直接就“包吃包住”&#xff0c;推荐阅读一下 【K哥爬虫普法专栏】。虽然大伙常说“搏一搏单…

weak_ptr 与 一个难发现的错误(循环依赖问题)笔记

推荐B站视频&#xff1a;7.weak_ptr与一个非常难发现的错误_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV18B4y187uL/?p7&spm_id_frompageDriver&vd_sourcea934d7fc6f47698a29dac90a922ba5a3一、weak_ptr weak_ptr并不拥有所有权并不能调用 -> 和 解引…

【MySQL】如何使用图形化界面DataGrip操作数据库

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-W5JDg0WA1tjEP66Y {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

uniapp Android 离线打包之未配置appkey或配置错误

1、去官网申请appKey: 申请Appkey 2、项目中使用appKey: <meta-dataandroid:name"dcloud_appkey"android:value"794534204bbae06989........" />3、参考 官方教程&#xff0c;修改配置&#xff1a; 配置教程 注意&#xff1a; 本地的appId 和 官…