JavaSE(5)_数组、算法的选择(未掌握)

【JavaSE系列】第六话 —— 数组 超超超超超超超详解JavaSE中关于数组的各种知识!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 阅读详情

目录

数组概述

 (前置知识)JVM内存_方法区、堆、虚拟机栈的简单介绍 

一维数组的使用

一维数组内存解析

多维数组的使用

 二维数组JVM内存解析

数组中涉及到的常见算法

数组元素的赋值

求数值型数组中元素的最大值、最小值、平均数、总和等

数组的深复制和浅复制、冒泡排序法

数组的反转、查找、快速排序法

Arrays 工具类的使用

数组使用中的常见异常 

数组元素的排序算法

十大内部排序算法

算法的 5 大特征

排序算法性能对比分析

各种内部排序方法性能比较

排序算法的选择


数组概述

  • 数组(Array),是多个相同类型数据按照以一定顺序排序的集合体,并使用一个名字命名(用变量存储指向堆内存的内存地址),并通过下标从0开始对集合体里面按照顺序存储相同类型的数据进行统一管理.
  • 因此数组内的名词有:
    • 数组名
    • 元素
    • 角标(最初最末下标)、下标、索引
    • 数组长度==元素个数
  • 数组特点:
    • 数组属于引用类型变量,用变量存储指向堆内存的内存地址。
    • 数组元素可以是相同的基本数据类型,也可以是相同的引用类型
    • 数组元素会在内存中开辟一条连续的内存空间,是有序排列的,目的是方便查找
    • 数组的长度一旦确认,就不能更改。后面我们学习数组拓展数组时都是将旧数组元素提取出来放到新数组中,然后丢弃旧数组。
  • 数组分类:
    • 维数分类:一维数组、二维数组等
    • 按照元素数组类型分类:基本数据类型数组、引用数据类型数组

 (前置知识)JVM内存_方法区、堆、虚拟机栈的简单介绍 

一维数组的使用

package javase5;

import java.util.Scanner;

public class Array1 {
    static char c1;
    public static void main(String[] args) {
        int[] intArray = null;//一维数组声明
        int[] intArray1 = new int[]{0, 1, 2, 3, 4};//一维数组静态初始化方法1:数组初始化和赋值一同完成
        int[] intArray2 = {0, 1, 2, 3, 4};//一维数组静态初始化方法2:数组初始化和赋值一同完成

        int[] intArray3 = new int[5];//以为数组静态初始化方法:数组初始化和赋值分开
        intArray3[0] = 0;
        intArray3[1] = 1;
        int length1 = intArray3.length;//5
        intArray3[2] = 2;
        intArray3[3] = 3;
        intArray3[4] = 4;
        int length2 = intArray3.length;//5
//        intArray3[5] = 5;//超过了数组角标,运行时数组下标越界异常java.lang.ArrayIndexOutOfBoundsException: 5

        //遍历数组
        //普通for循环
        for (int i = 0; i < intArray3.length; i++) {
            System.out.print(intArray3[i]);//01234
        }
        //高效for循环for(遍历出来的数据类型 遍历出来的数据的变量名 : 被遍历的对象){
        //              循环体,循环次数为被遍历对象的长度
        //              }
        for (int i : intArray3) {
            System.out.print(i);//01234
        }
        System.out.println('\n' + "----------分割线------------");

        /*各种类型数组动态初始化时自身的默认值*/
        //int[]
        int[] arr1 = new int[4];
        for (int i : arr1) {
            System.out.print(i);//0000
        }
        System.out.println('\n' + "----------分割线------------");
        //short[]
        short[] arr2 = new short[4];
        for (int i : arr2) {
            System.out.print(i);//0000
        }
        System.out.println('\n' + "----------分割线------------");
        //byte[]
        byte[] arr3 = new byte[4];
        for (int i : arr3) {
            System.out.print(i);
        }
        System.out.println('\n' + "----------分割线------------");
        //float[]
        float[] arr4 = new float[4];
        for (float i : arr4) {
            System.out.print(i);//0.00.00.00.0
        }
        System.out.println('\n' + "----------分割线------------");
        //double
        double[] arr5 = new double[4];
        for (double i : arr5) {
            System.out.print(i);//0.00.00.00.0
        }
        System.out.println('\n' + "----------分割线------------");
        //char[]
        char[] arr6 = new char[4];
        for (char i : arr6) {
            System.out.print(i);//4个都是空串
        }
        /*char值默认就是空字符,空字符不能直接对比,在用==于基本数据类型对比时空串会转换成0来对比*/
//        if(''==0) System.out.println("不能直接对比");//编译错误,空字符文字
        if (arr6[0] == 0)System.out.println("char数组里面的元素默认为空串");
        System.out.println('\n' + "----------分割线------------");

        //String[]
        String[] arr7 = new String[4];
        for (String i : arr7) {
            System.out.print(i);//nullnullnullnull
        }

        /*
         * 2. 从键盘读入学生成绩,找出最高分,并输出学生成绩等级。
         * 成绩>=最高分-10    等级为’A’   
         * 成绩>=最高分-20    等级为’B’
         * 成绩>=最高分-30    等级为’C’   
         * 其余等级为’D’
         * 提示:先读入学生人数,根据人数创建int数组,存放学生成绩。
         */
        //1.使用Scanner,读取学生的个数
        Scanner scan = new Scanner(System.in);
        System.out.print("请输入学生人数:");
        int num = scan.nextInt();

        //2.创建数组,存储学生成绩,动态初始化
        int[] str = new int[num];
        System.out.println("请输入" + num + "个学生成绩");

        //3.给数组中的元素赋值
        int maxnum = 0;
        for(int i = 0;i < str.length;i++){
            str[i] = scan.nextInt();
            //4.获取数组元素中的最大值:最高分
            if(maxnum < str[i]){
                maxnum = str[i];
            }
        }

        //5.根据每个学生成绩与最高分的差值,得到每个学生的等级,并输出等级和成绩
        char Grade;	//成绩等级
        for(int i = 0;i < str.length;i++){
            if(maxnum - str[i] <= 10){
                Grade = 'A';
            }else if(maxnum - str[i] <= 20){
                Grade = 'B';
            }else if(maxnum - str[i] <= 30){
                Grade = 'C';
            }else{
                Grade = 'D';
            }

            System.out.println("student " + i + "score is" + str[i] +
                    " grade is " + Grade);
        }
    }
}

一维数组内存解析

int[] arr = new int[]{1,2,3};
String[] arr1 = new String[4];
arr1[1] = “刘德华”;
arr1[2] = “张学友”;
arr1 = new String[3];
System.out.println(arr1[1]);//null

大众点评爬虫实战:如何用Python绕过反爬机制获取评论数据(附完整代码) 本文深入探讨了2024年使用Python进行大众点评数据采集的实战策略。文章详细解析了现代反爬机制的核心逻辑,并提供了从构建拟人化请求会话、应对动态内容与接口加密,到工程化实践(代理调度、状态持久化)的完整解决方案与代码示例,旨在帮助数据分析师稳健获取评论数据,用于后续的文本挖掘与商业洞察。 阅读详情

相关推荐

海康威视4G摄像头直连实战:不用萤石云,手把手教你用ISUP SDK搞定跨网段视频流

本文详细介绍了如何通过海康威视ISUP SDK实现4G摄像头的直连通信,提供了一套零平台费、自主可控的技术方案。文章涵盖技术选型、设备端配置、服务器端开发及高级应用场景,特别适合中小型安防项目,帮助开发者解决跨网段视频流传输难题,降低长期运营成本。

weixin_27076351的博客 467

MaPLe: Multi-modal Prompt Learning

具体而言,我们在语言分支中附加可学习的上下文标记,并通过耦合函数显式地将视觉 Prompt 置于语言 Prompt 上,以建立它们之间的交互。使用 Prompt 来适应CLIP (语言或视觉) 的单个分支中的表示是次优的,因为它不允许在下游任务上动态调整两个表示空间的灵活性。由此,提出了一种分支感知的多模态 Prompt,通过在两种模态之间共享提示来协调 CLIP 的视觉和语言分支。在 Prompt Tuning 中,必须采取多模态方法获得同时适应 CLIP 的视觉和语言分支,以实现上下文优化的完整性。

weixin_48907099的博客 1051

PT静态时序分析实战:从基础命令到高级报告解析

本文详细介绍了PT(PrimeTime)静态时序分析(STA)的实战技巧,从基础命令如pt_shell和report_timing的使用,到高级报告解析与问题排查。通过丰富的实例和脚本示例,帮助工程师快速掌握时序分析的核心技能,提升芯片设计验证效率。

weixin_29289821的博客 954

PINN——加入物理约束的神经网络

【摘要】 基于物理信息的神经网络(Physics-informed Neural Network, 简称PINN),是一类用于解决有监督学习任务的神经网络,它不仅能够像传统神经网络一样学习到训练数据样本的分布规律,而且能够学习到数学方程描述的物理定律。与纯数据驱动的神经网络学习相比,PINN在训练过程中施加了物理信息约束,因而能用更少的数据样本学习到更具泛化能力的模型。本文主要解析这种神经网络以...

qq_39444290的博客 4582

DSP TMS320C6657中FFT函数的调用与具体使用方法

首先明确一点,C6678中FFT的函数形式为: N : length of FFT in complex samples ptr_x : pointer to complex data input ptr_w : pointer to complex twiddle factor ptr_y : pointer to complex output data brev : pointer to bit reverse table containing 64 entries n_min : should be

Kayboy的博客 3011

电容放电测试解析

电子设备断电后滤波电容残留电荷存在触电风险,需符合IEC等安全标准对放电时间的要求。放电测试需测量电容电压下降至安全值的时间,设计可采用主动放电电路或被动放电电阻。常见问题包括电阻选择不当或电路设计缺陷,建议预留放电时间裕度并采用组合放电方案。合规的放电设计是确保产品安全性和可靠性的关键环节。

硬核科技 799

数字图像处理:直方图匹配或规定化Histogram Matching (Specification)原理及感悟

本文介绍了连续图像和数字图像直方图匹配(直方图规定化)的原理、处理过程,并提供了案例进行了讲解。可以看到,直方图均衡处理是直方图匹配的一个重要桥梁。 最后,对于直方图规定化这个翻译个人觉得很low,个人感觉叫指定直方图更好理解,但Histogram Specification怎么翻译确实不太好把握,因此还是叫Histogram Matching直方图匹配最好。

老猿Python 2878

PCL 点云八叉树射线相交

PCL 点云八叉树射线相交

dayuhaitang1的博客 850

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

上一篇: JavaSE(3)_运算符及运算符优先级
下一篇: JavaSE(6)_面向对象(上)、简单提及MVC设计思想
自律彭于晏
博客等级 码龄5年 946粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值