day09_数组进阶

news2025/4/9 18:17:21

今日内容

零、 复习昨日
一、作业
二、引用类型[重要]
三、数组拷贝
四、数组扩容
五、数组排序[面试|笔试]
六、Arrays

零、 复习昨日

1数组创建后能否改变长度

  • 不能

2数组创建后能否存储不同类型的数据

  • 不能 √
  • 能,能默认转型的可以存储
    double[] arr2 = new double[3];
    arr2[0] = 1.1; //double数组中存储double
    arr2[1] = 1;//double数组中存储int,因为可以默认转型

3数组动态创建的语法,以int数组为例

  • 动态是给长度不给值
  • new int[3];

4数组静态创建的语法,以int数组为例

  • 静态是指定元素,不指定长度
  • new int[]{1,2,3,4}
  • 简写 {1,2,3,4}

5数组取值

  • 数据类型 变量名 = 数组名[下标]
  • int a = arr[0];

6数组存值

  • 数组名[下标] = 值;
  • arr[0] = 100;

7遍历是什么意思,尝试手写代码

  • 挨个找到数组元素
    // i是下标
    for(int i = 0;i < arr.length;i++){
    int a = arr[i];
    }

8数组的长度属性

  • length

9画数组的内存图

10 下标就是索引,是数组中存储元素的编号,从0开始

一、作业

package com.qf.homework;

/**
 * @desc
 * 1 读完需求,能写多少写多少
 * 2 倒推,以结果为导向,再往上细分步骤
 * 3
 * 4 出错误,读代码
 */
public class Homework2 {

    // 邱哥去参加今年歌唱比奖,有8个评委打分,(去掉1个最低分,1个最高分)求平均分
    public static void main(String[] args) {
        avg();
    }

    public static void avg() {
        double[] arr = {2,3,2,2,2,2,0,2};
        // 遍历数组挨个比较找到最高最低
        // 得到最高和最低
        // 先全部求和
        double max = arr[0];
        double min = arr[0];
        double sum = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] > max) {
                max = arr[i];
            }
            if (arr[i] < min) {
                min = arr[i];
            }
            sum += arr[i];
        }
        // 再去掉最高最低
        sum = sum - max - min;
        // 平均分
        double avg = sum / (arr.length - 2);
        System.out.println("最终得分: " + avg );
    }
}

二、引用类型[理解]

ps: 讲解引用类型重要的不是代码,而是思想

java的数据类型

  • 基本数据类型
    • 四类八种
  • 引用数据类型
    • 数组
    • 接口

要想了解引用类型,先知道一些jvm知识

  • jvm是java虚拟机,其中有内存可以运行代码
  • java内存中堆区域,栈区域
  • java中方法执行进栈,凡是new都会在堆中开辟空间,分地址,初始化
  • 方法执行完弹栈(出栈消失)

2.1 基本类型

// 设计方法,方法有参数(基本类型) , 方法内对该数据进行修改,最终查看数据的值

基本类型

  • 基本类型变量是随着方法进栈,在栈中出现
  • 方法执行完弹栈,消失
  • 基本类型在方法传参数时,是值传递
package com.qf.array;

/**
 * |-----------------------------------------------
 * |  ____   _          _____  _      _  _        |
 * | / __ \ (_)        / ____|| |    (_)(_)       |
 * || |  | | _  _   _ | (___  | |__   _  _  _   _ |
 * || |  | || || | | | \___ \ | '_ \ | || || | | ||
 * || |__| || || |_| | ____) || | | || || || |_| ||
 * | \___\_\|_| \__,_||_____/ |_| |_||_|| | \__,_||
 * |                                   _/ |       |
 * |                                  |__/        |
 * |-----------------------------------------------
 * |                 天道酬勤                     |
 * |             代码敲烂 月薪过万                |
 * L----------------------------------------------
 *
 * @desc 引用类型和基本类型的区别
 */
public class Demo1 {

    public static void main(String[] args) {
        int a = 1;
        System.out.println("1 a = " + a );
        changeValue(a);
        System.out.println("4 a = " + a );
    }

    // 设计方法,方法有参数(基本类型) ,
    // 方法内对该数据进行修改,最终查看数据的值
    public static void changeValue(int n) {
        System.out.println("2 n = " + n );
        n *= 10;
        System.out.println("3 n = " + n );
    }
}

image-20230928102120214

2.2 引用类型

引用类型

  • 引用类型有个特点,就是它们都是new出来
  • 凡是new出来的都会在堆中出现
  • 数组在堆中创建完后,赋值出去的地址值,包括以后传参数**,传递也是地址**
  • 即 new一次,内存中数组只有一个
  • 这个地址值就是引用,或者说数组名就是引用,因为通过数组名找到内存中的数组
  • String排除
package com.qf.array;

/**
 * @desc 引用类型和基本类型的区别
 */
public class Demo1 {

    public static void main(String[] args) {
        int[] arr = {1,2,3,4};
        System.out.println("----- 第一次 -----" );
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i] );
        }
        changeArray(arr);
        System.out.println("----- 第四次 -----" );
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i] );
        }
    }

    // 设计方法,方法有参数(引用类型-数组) ,
    // 方法内对该数组进行修改,最终查看数据的值
    public static void changeArray(int[] arr){
        System.out.println("----- 第二次 -----" );
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i] );
        }
        // 改变数组
        for (int i = 0; i < arr.length; i++) {
            arr[i] = arr[i] * 10;
        }
        System.out.println("----- 第三次 -----" );
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i] );
        }
    }
}

image-20230928110721790

2.3 总结

关于基本和引用

  • 凡是基本类型的数据,即变量都是在栈中的方法内,与方法同在
    • 常见情况就是方法传参时,基本类型是将值本身传递出去
  • 引用类型是new出来的,存在于堆中,平时操作这些数组对象都是通过地址值操作的
    • 常见情况就是方法传参数时,引用类型传递的是地址值
    • 即虽然是不同的方法但是操作的是同一个数组对象
    • 因为大家都是引用的堆中的数组对象

三、数组排序[面试|笔试]

数组的排序算法: 十大排序算法

泡,择,

速,排序,尔,并排序

排序,数排序,数排序

3.1 冒泡排序

冒泡排序思路: 相邻两个比较,交互位置

package com.qf.array;

/**
 * |-----------------------------------------------
 * |  ____   _          _____  _      _  _        |
 * | / __ \ (_)        / ____|| |    (_)(_)       |
 * || |  | | _  _   _ | (___  | |__   _  _  _   _ |
 * || |  | || || | | | \___ \ | '_ \ | || || | | ||
 * || |__| || || |_| | ____) || | | || || || |_| ||
 * | \___\_\|_| \__,_||_____/ |_| |_||_|| | \__,_||
 * |                                   _/ |       |
 * |                                  |__/        |
 * |-----------------------------------------------
 * |                 天道酬勤                     |
 * |             代码敲烂 月薪过万                |
 * L----------------------------------------------
 *
 * @desc
 */
public class Demo2 {

    public static void main(String[] args) {
        int[] arr = {5,4,3,2,1};
        System.out.println("-- 排序前 --" );
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println( );
        // 开始排序
        // 外层循环控制比较的趟数
        // -1的目的是最后一趟没有必要比较
        for (int i = 0;i < arr.length - 1;i++) {
            // 内存循环控制每趟里边比较的次数
            // -1防止数组下标越界
            // -i每趟少比较一次
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] >= arr[j+1]) {
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1]= temp;
                }
            }
        }

        System.out.println("-- 排序后 --" );
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] +" " );
        }
    }
}

image-20230928150626490

冒泡排序

3.2 选择排序

选择排序:

  • 第一趟: 选择最小的与第一个交换位置
  • 第一趟: 剩下的元素选择最小的与第2个交换位置
package com.qf.array;

import javax.print.attribute.standard.OrientationRequested;

/**
 * |-----------------------------------------------
 * |  ____   _          _____  _      _  _        |
 * | / __ \ (_)        / ____|| |    (_)(_)       |
 * || |  | | _  _   _ | (___  | |__   _  _  _   _ |
 * || |  | || || | | | \___ \ | '_ \ | || || | | ||
 * || |__| || || |_| | ____) || | | || || || |_| ||
 * | \___\_\|_| \__,_||_____/ |_| |_||_|| | \__,_||
 * |                                   _/ |       |
 * |                                  |__/        |
 * |-----------------------------------------------
 * |                 天道酬勤                     |
 * |             代码敲烂 月薪过万                |
 * L----------------------------------------------
 *
 * @desc 选择排序
 */
public class Demo3 {

    public static void main(String[] args) {
        int[] arr = {5,4,3,6,2,1};
        System.out.println("-- 排序前 --" );
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println( );
        // 开始排序
        for (int i = 0; i < arr.length; i++) {
            // 假定第一个最小
            int minIndex = i;
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[j] < arr[minIndex]) {
                    minIndex = j;
                }
            }
            // 交换位置
            int temp = arr[minIndex];
            arr[minIndex] = arr[i];
            arr[i] = temp;
        }
        System.out.println("-- 排序后 --" );
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println( );

    }
}

选择排序

选择排序过程

  • 遍历一趟,找到最小的数据,然后该位置数据与第一位交换位置
    • 这一趟比较完,确定最小数据在第一位
  • 下一趟,从第二个开始,继续找最小的,找到后与第二个交互位置
    • 这一趟走完,确定第二个较小的数据

附录

change 改变
value 值
temp 临时
index 索引。下标
sum
count
avg
min
max
element 元素
reference 引用
change 改变
value  值
source 源,资源,简写src
position 位置,简写pos
destination 目的目标,简写dest
data  数据
sort 排序

mg-5gA4UWNf-1695886209906)]

选择排序过程

  • 遍历一趟,找到最小的数据,然后该位置数据与第一位交换位置
    • 这一趟比较完,确定最小数据在第一位
  • 下一趟,从第二个开始,继续找最小的,找到后与第二个交互位置
    • 这一趟走完,确定第二个较小的数据

附录

change 改变
value 值
temp 临时
index 索引。下标
sum
count
avg
min
max
element 元素
reference 引用
change 改变
value  值
source 源,资源,简写src
position 位置,简写pos
destination 目的目标,简写dest
data  数据
sort 排序

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TouchGFX之动态位图

标准位图会被编译到应用中&#xff0c;因此必须在编译时提供。在运行时间在RAM中创建位图&#xff0c;被称为动态位图。 动态位图的使用与编译到应用中的静态位图相同。 动态位图配置 必须先配置位图缓存&#xff0c;然后才能创建动态位图。 FrontendApplication.hpp#inclu…

基于PHP+MySQL的养老院管理系统

摘要 随着21世纪互联网时代的兴起&#xff0c;我们见证了人们生活方式的巨大改变。这个时代不仅深刻影响了我们的生活&#xff0c;还改变了我们对信息科学的看法。社会的各个领域都在不断发展&#xff0c;人们的思维也在不断进步&#xff0c;与此同时&#xff0c;信息的需求也与…

开具数电票如何减少认证频次?

“数电票”开具需多次刷脸认证&#xff0c;如何减少认证频次&#xff1f; 法定代表人、财务负责人可以在“身份认证频次设置”功能自行设置身份认证时间间隔&#xff0c;方法如下&#xff1a; 第一步 登录电子税务局。企业法定代表人或财务负责人通过手机APP“扫一扫”&#x…

jupyter notebook可以打开,但无法打开.ipynb文件,报错500 : Internal Server Error

1、错误信息 2、解决办法 打开Anaconda Promt界面&#xff0c;进入自己的虚拟环境。在命令行输入以下指令&#xff1a; pip install --upgrade nbconvert

全国排名前三的直播公司无锋科技入驻天府蜂巢成都直播产业基地

最近&#xff0c;全国排名前三的直播公司——无锋科技&#xff0c;正式宣布入驻位于成都的天府蜂巢直播产业基地&#xff0c;这一消息引起了业内人士的高度关注。成都直播产业基地一直是中国直播产业的重要地标之一&#xff0c;其强大的技术和资源优势为众多直播公司提供了广阔…

TouchGFX之二进制字体

将字体链接到应用的基本原则的主要优势是应用始终会自动包含应用中使用的更新文本和字体排印。 因此&#xff0c;使用起来十分容易和安全。 其缺点在于字体会使应用的体积变大。 为了缓解这个问题&#xff0c;TouchGFX允许应用使用二进制字体。 这些字体不链接到应用&#xff…

西北主要河流水系(绿洲)流域(山区)及高程分类数据集(一)

最近收集整理的了西北地区主要河流水系&#xff08;绿洲&#xff09;流域&#xff08;山区&#xff09;及高程分类数据&#xff0c;&#xff0c;本次主要是新疆的河流水系&#xff08;绿洲&#xff09;流域&#xff08;山区&#xff09;及高程分类数据&#xff08;矢量&#xf…

Mysql高级——数据库调优策略(1)

数据库其它调优策略 1. 数据库调优的措施 1.1 调优的目标 尽可能节省系统资源&#xff0c;以便系统可以提供更大负荷的服务。&#xff08;吞吐量更大&#xff09;合理的结构设计和参数调整&#xff0c;以提高用户操作响应的速度。&#xff08;响应速度更快&#xff09;减少系…

使用华为eNSP组网试验⑶-OSPF单区域组网

从2019年6月份开始学习网络&#xff0c;最主要的驱动力是一旦涉及网络配置的改动都需要找别人帮忙&#xff0c;有时候被别人找理由拖延或者拒绝&#xff0c;心里就会难过&#xff0c;不就是配置一些代码吗&#xff1f;&#xff01;这和写程序有多大的区别&#xff1f;&#xff…

Swift 周报 第三十八期

文章目录 前言新闻和社区苹果自研调制解调器芯片受挫&#xff1a;速度太慢容易过热&#xff0c;落后高通 3 年App Store 现已接受适用于最新版操作系统的 App 和游戏提交 提案通过的提案正在审查的提案驳回的提案 Swift论坛推荐博文话题讨论关于我们 前言 本期是 Swift 编辑组…

RDMA技术(解决主从数据库数据不一致问题)

优质博文&#xff1a;IT-BLOG-CN 一、简介 RDMA(remote direct memory access)即远端直接内存访问&#xff0c;是一种高性能网络通信技术&#xff0c;具有高带宽、低延迟、无CPU消耗等优点。 主要解决网络传输中服务器端数据处理的延迟问题。 Remote&#xff1a;数据通过网络…

1.centos7 安装显卡驱动、cuda、cudnn

安装conda 参考 python包 2.安装conda python库-CSDN博客3.Cenots Swin-Transformer-Object-Detection环境配置-CSDN博客 1.安装显卡驱动 步骤1&#xff1a;安装依赖 yum -y install kernel-devel yum -y install epel-release yum -y install gcc 步骤2&#xff1a;查询显…

Windows中实现将bat或exe文件作为服务_且实现命令行安装、配置、启动、删除服务

一、背景描述 在Windows环境下进行日常的项目开发过程中&#xff0c;有时候需要将bat文件或exe文件程序注册为Windows的服务实现开机自己运行&#xff08;没有用户登陆&#xff0c;服务在开机后也可以照常运行&#xff09;、且对于那些没有用户交互界面的exe程序来说只要在后台…

华秋DFM从2.1.6升级到3.x版本出现的问题

以前一直使用CAM350检查最终的gerber&#xff0c;后来无意中接触到了华秋DFM&#xff0c;使用起来简单许多&#xff0c;将可制造性排查的相当完整。 但是前不久因为一块板卡刚出炉&#xff0c;需要检查DFM&#xff0c;于是开启了华秋&#xff0c;刚打开&#xff0c;说可以更新…

华为云云耀云服务器L实例评测 | 实例评测使用之体验评测:华为云云耀云服务器安全加固/防范黑客攻击

华为云云耀云服务器L实例评测 &#xff5c; 实例评测使用之体验评测&#xff1a;华为云云耀云服务器安全加固/防范黑客攻击 介绍华为云云耀云服务器 华为云云耀云服务器 &#xff08;目前已经全新升级为 华为云云耀云服务器L实例&#xff09; 华为云云耀云服务器是什么华为云云…

SpringCloud之NamedContextFactory

NamedContextFactory 可以创建一个子容器&#xff08;或者说子上下文&#xff09;&#xff0c;每个子容器可以通过 Specification 定义 Bean。 public abstract class NamedContextFactory<C extends NamedContextFactory.Specification>implements DisposableBean, App…

Opengl之多光源

GLSL中的函数和C函数很相似&#xff0c;它有一个函数名、一个返回值类型&#xff0c;如果函数不是在main函数之前声明的&#xff0c;我们还必须在代码文件顶部声明一个原型。我们对每个光照类型都创建一个不同的函数&#xff1a;定向光、点光源和聚光。 当我们在场景中使用多个…

413 Request Entity Too Large问题

问题背景 在某系统中上传文件时&#xff0c;如果文件大小超过了一定范围就会爆 413 Request Entity Too Large 问题。 原因 在使用 nginx 反向代理后台服务时&#xff0c;如果请求体中过大&#xff0c;超过了默认的 1M 则会爆该错误。 解决方案 在 nginx 中&#xff0c;指…

Linux 创建 终止线程(thread)

进程线程区别 创建线程 #include <pthread.h> int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg); -功能&#xff1a;创建一个子线程&#xff0c;一般情况下main函数所在的线程称为主线程&#xff0c;…

C++标准模板(STL)- 输入/输出操纵符-(std::setprecision,std::setw)

操纵符是令代码能以 operator<< 或 operator>> 控制输入/输出流的帮助函数。 不以参数调用的操纵符&#xff08;例如 std::cout << std::boolalpha; 或 std::cin >> std::hex; &#xff09;实现为接受到流的引用为其唯一参数的函数。 basic_ostream::…