7、数组知识点汇总

一、 数组基本概念

程序=算法+数据结构

  1. 算法:解决程序的流程步骤
  2. 数据结构:将数据按照某种特定的结构来存储
  3. 设计良好的数据结构会导致良好的算法。
  4. ArrayList、LinkedList

数组是最简单的数据结构。

1、数组:

数组:存放同一种类型数据的集合,在内存里面是开辟一块连续的区域。

int num = 3;
int[]  array = new int[4];
  • 1、存放整数类型的数组
  • 2、长度是4 (数组缺点长度固定,ArrayList解决长度固定的问题)
  • 3、只能存放int类型

2、数组的访问:数组名[下标]

在这里插入图片描述

元素类型[] 数组名 = new 元素类型[长度];

int[] array1 = new int[3];
double[] array2 = new double[3];
boolean[] array3 = new boolean[3];
char[] array4 = new char[3];
// Student[] array5 = new Student[3];

3、数组定义的方式:

  1. 静态初始化:在声明数组的同时,直接给出数组元素的初始值。适用于数组元素已知的情况。
int[] array = {32,5,7,87};
int[] array = new int[]{32,5,7,87};
  1. 动态初始化:在声明数组时,仅指定数组的长度,然后通过赋值语句逐个给数组元素赋值。适用于数组元素在声明时未知的情况。
int[] array = new int[4];
array[0] = 34;
@Test
public void test1() {
    int num = 3;
    int score1 = 84;
    int score2 = 54;
    int score3 = 64;
    //数组:存放同一种类型数据的集合,在内存里面是开辟一块连续的区域。
    int[] array = new int[4];
    System.out.println("length: " + array.length);//4
    array[0] = 33;
    array[1] = 2;
    array[2] = 45;
    array[3] = 19;
    for (int i = 0; i < array.length; i++) {
        System.out.println(array[i]);
    }
    System.out.println("-------------");
    for (int i = array.length - 1; i >= 0; i--) {
        System.out.println(array[i]);
    }

}

二、数组下标越界异常

java.lang.Array Index OutOf Bounds Exception: 4
数组下标越界异常
@Test
public void test45() {
    int[] array = new int[4];
    array[0] = 33;
    array[1] = 2;
    array[2] = 45;
    array[3] = 19;
    for (int i = 0; i <= array.length; i++) {
        //java.lang.ArrayIndexOutOfBoundsException: 4
        System.out.println(array[i]);
    }
}

三、数组累加和、最大值、最小值、冒泡排序

数组最重要操作就是遍历。

只要能遍历所有元素就可以求最大值、最小值、对数组排序

1、数组累加和

@Test
public void test189() {
    int[] array = new int[4];
    array[0] = 33;
    array[1] = 2;
    array[2] = 45;
    array[3] = 19;
    //array.fori   fori
    int sum = 0;
    for (int i = 0; i < array.length; i++) {
        sum = sum + array[i];
    }
    System.out.println("sum: " + sum);
}

2、最大值、最小值

//数组最重要操作就是遍历。
//只要能遍历所有元素:求最大值、最小值、排序。
@Test
public void test23(){
    int[] array = {23, 45, 67, 2, 12};
    int max = array[0];
    for (int i = 0; i < array.length; i++) {
        if (array[i] > max) {
            max = array[i];
        }
    }
    System.out.println("max: " + max);
}

@Test
public void test333() {
    int[] array = {23, 45, 67, 2, 12};
    int maxValue = getMax(array);
    System.out.println(maxValue);
}

//参数,形参
/**
 * 返回数组的最大值
 * @param array 传递过来的数组
 * @return 数组最大值
 */
public int getMax(int[] array) {
    int max = array[0];
    for (int i = 0; i < array.length; i++) {
        if (array[i] > max) {
            max = array[i];
        }
    }
    return max;
}

@Test
public void test24(){
    int[] array = {23, 45, 67, 2, 12};
    int min = array[0];
    for (int i = 0; i < array.length; i++) {
        if (array[i] < min) {
            min = array[i];
        }
    }
    System.out.println("min: " + min);
}

3、数组的排序:冒泡排序

int[] array = {40, 17, 21, 1}; // 1, 17,21,40
第一轮:40冒到最右边
17,40,21,1
17,21,40,1
17,21,1,40   -------   40 冒出来
第二轮:21冒出来
17,21,1,40
17,1,21,40  -------   21冒出来
第三轮:17冒出来
1,17,21,40  ------- 17冒出来

public void sort(int[] array) {
}

4个数只要比较3轮就可以,剩下那个数不要要排序就是最小的
第一轮:比较3次
第二轮:比较2次
第三轮:比较1次
i+j =4=array.length
j=array.length-i
@Test
public void test22() {
    //i=1   j=
    int[] array = {40, 17, 21, 1}; // 1, 17,21,40
    sort(array);
    for (int i = 0; i < array.length; i++) {
        System.out.println(array[i]);
    }
}

private void sort(int[] array) {
    for (int i = 1; i <= array.length - 1; i++) {
        for (int j = 0; j < array.length - i; j++) {
            if (array[j] > array[j + 1]) {
                int temp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = temp;
            }
        }
    }
}

四、数组复制

1、System.arraycopy

这是标准且高效的方法,适用于复制数组的部分或全部。

int[] source = {1, 2, 3, 4, 5};
int[] dest = new int[5];
System.arraycopy(source, 0, dest, 0, source.length);

//数组.fori
/*for (int i = 0; i < dest.length; i++) {
    System.out.println(dest[i]);
}*/
//增强的for循环  数组.for
for (int num : dest) {
    System.out.print(num + " ");
}
参数说明:

1.source:源数组
2.0:源数组的起始位置
3.dest:目标数组
4.0:目标数组的起始位置
5.source.length:复制的元素个数

2、使用 Arrays.copyOf 方法

适合复制整个数组或调整大小时使用。

import java.util.Arrays;

int[] source = {1, 2, 3, 4, 5};
int[] copiedArray = Arrays.copyOf(source, source.length); // 复制整个数组

for (int num : copiedArray) {
    System.out.print(num + " ");
}

可以调整目标数组的大小:

int[] array = Arrays.copyOf(source, 10); // 创建长度为 10 的数组

3、使用 Arrays.copyOfRange 方法

复制数组的指定范围。

import java.util.Arrays;

int[] source = {1, 2, 3, 4, 5};
int[] array = Arrays.copyOfRange(source, 1, 4); // 复制索引 1 到 3 的元素

for (int num : array) {
    System.out.print(num + " ");
}

4、使用 clone 方法

适用于简单复制整个一维数组。

int[] source = {1, 2, 3, 4, 5};
int[] array = source.clone();

for (int num : array) {
    System.out.print(num + " ");
}

5、手动遍历赋值

当需要自定义复制逻辑时使用。

int[] source = {1, 2, 3, 4, 5};
int[] dest = new int[source.length];

for (int i = 0; i < source.length; i++) {
    dest[i] = source[i];
}

for (int num : dest) {
    System.out.print(num + " ");
}

6、对比

在这里插入图片描述

五、二维数组(了解)

二维数组里面又是个一位数组

Java数组支持规则数组和不规则数组:

在这里插入图片描述

1、二维数组的创建和初始化:

int[][] array = {{1,2},{2,3},{3,4,5}};

从最高维开始,分别为每一维分配空间:
int[][] array = new int[3][];
array[0] = new int[2];
array[1] = new int[2];
array[2] = new int[3];
array[0][0] = 1;
array[1][1] = 3;

在这里插入图片描述
在这里插入图片描述

两行互换:

int[] temp = array[0];
array[0] = array[1];
array[1] = temp;

直接为每一维分配空间:

int[][] array = new int[2][3];

在这里插入图片描述

@Test
public void test222() {
    int[][] array = new int[3][];
    array[0] = new int[2];
    array[1] = new int[2];
    array[2] = new int[3];
    array[0][0] = 23;
    array[0][1] = 12;
    array[1][0] = 22;
    array[1][1] = 22;
    array[2][0] = 21;
    array[2][1] = 22;
    array[2][2] = 23;
    for (int i = 0; i < array.length; i++) {
        for (int j = 0; j < array[i].length; j++) {
            System.out.println(array[i][j]);
        }
    }
}

六、作业

1、int[] scores={0,0,1,2,3,5,4,5,2,8,7,6,9,5,4,8,3,1,0,2,4,8,7,9,5,2,1,2,3,9};

求出上面数组中0-9分别出现的次数

@Test
public void test2() {
    int[] scores={0,0,1,2,3,5,4,5,2,8,7,6,9,5,4,8,3,1,0,2,4,8,7,9,5,2,1,2,3,9};
    int count0 = 0;
    int count1 = 0;
    int count2 = 0;
    int count3 = 0;
    for (int i = 0; i < scores.length; i++) {
        switch (scores[i]) {
            case 0:
                count0++;
                break;
            case 1:
                count1++;
                break;
            case 2:
                count2++;
                break;
            case 3:
                count3++;
                break;
        }
    }

    System.out.println("0出现"+count0+"次");
    System.out.println("1出现"+count1+"次");
    System.out.println("2出现"+count2+"次");
    System.out.println("3出现"+count3+"次");
}

@Test
public void test3() {
    int[] scores={0,0,1,2,3,5,4,5,2,8,7,6,9,5,4,8,3,1,0,2,4,8,7,9,5,2,1,2,3,9};
    int[] counts = new int[10];
    //int count0 = 0;  counts[0]
    //int count1 = 0;  counts[1]
    //int count2 = 0;  counts[2]
    //int count3 = 0;  counts[3]
    for (int i = 0; i < scores.length; i++) {
        counts[scores[i]]++;
    }

    //增强的for循环
    /*for (int count : counts) {
        System.out.println("1出现的3次");
    }*/
    for (int i = 0; i < counts.length; i++) {
        System.out.println(i + "出现的"+counts[i]+"次");
    }

}

2、int[] scores={0,0,1,2,3,5,4,5,2,8,7,6,9,5,4,8,3,1,0,2,4,8,7,9,5,2,1,2,3,9};

要求求出其中的奇数个数和偶数个数。

3、 0.6332的数据类型是()

A float B double C Float D Double

4、 Java 中 main() 函数的返回值是什么 ?

A 、 String

B 、 int

C 、 char

D 、 void

5 、如下哪个字串在Java 中可作为自定义标识符?

A 、 $number

B 、 super

C 、 3number

D 、 #number

6 、下面的代码段中,执行之后 i 和 j 的值是什么 ?

int i = 1;

int j;

j = i++;

A 、 1, 1

B 、 1, 2

C 、 2, 1

D 、 2, 2

7 、下面哪个赋值语句不是合法的?

A 、 float a = 2.0

B 、 double b = 2.0

C 、 int c = 2

D 、 long d = 2

java中小数默认是double类型,整数的默认类型是int。
如果想把小数赋值给float类型,float f = 10.1f;

8 、下面哪个是 main() 函数的合法参数 ?

A 、 char args[]

B 、 char args[][]

C 、 String[] args

D 、 String args

argument

9 、已知表达式 int[] m = {0, 1, 2, 3, 4, 5, 6 };

下面哪个表达式的值与数组最大下标数相等?

A 、 m.length()

B 、 m.length-1

C 、 m.length()+1

D 、 m.length+1

10、 在Java中,属于整数类型变量的是( )

A.single

B.double

C.byte

D.char

11.下列语句哪一个正确()

A. Java程序经编译后会产生machine code

B. Java程序经编译后会产生byte code(字节码) .class

C. Java程序经编译后会产生DLL

D.以上都不正确

12、题目:一个任意一个字符串,判断它是不是回文。

“abcba”

char[] array = {‘a’ , ‘b’, ‘c’, ‘b’ , ‘a’};

在这里插入图片描述

i=0 j=array.length-1

i=1 j=array.length-2

i+j=array.length-1

j=array.length-i-1

array.length-i-1

public void test889() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入字符串: ");
        String str = scanner.next();
        //String str = "abcba";
        char[] array = str.toCharArray();
        //初始认为是回文,接下来遍历看能不能找到一个反例
        //最后遍历完了都没有找到反例,代表是回文
        //boolean flag = true;
        boolean isHuiWen = true;
        for (int i = 0; i < array.length / 2; i++) {
            if (array[i] != array[array.length - i - 1]) {
                isHuiWen = false;
                //找到一个反例,就证明一定不是回文,不需要再往后判断
                break;
            }
        }
        
         //初始认为是回文,遍历完了,没有找到任何一个反例,这个字符串就是回文
        if (isHuiWen) {
            System.out.println("是回文");
        } else {
            System.out.println("不是回文");
        }
    }

13、输入一行字符串,分别统计出其中英文字母、空格、数字和其它字符的个数。

@Test
    public void test78() {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入字符串:");
        String str = scanner.nextLine();
        //"dsfhi 34**DSD [34"
        char[] array = str.toCharArray();
        int letterCount = 0;
        int spaceCount = 0;
        int digitCount = 0;
        int otherCount = 0;
        for (int i = 0; i < array.length; i++) {
            if ((array[i] >= 'A' && array[i] <= 'Z') || (array[i] >= 'a' && array[i] <= 'z')) {
                letterCount++;
            } else if (array[i] == ' ') {
                spaceCount++;
            } else if (array[i] >= '0' && array[i] <= '9') {
                digitCount++;
            } else {
                otherCount++;
            }
        }
        System.out.println("字母出现次数:" + letterCount);
        System.out.println("空格出现次数:" + spaceCount);
        System.out.println("数字出现次数:" + digitCount);
        System.out.println("其他出现次数:" + otherCount);
    }

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

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

相关文章

计算机网络 (48)P2P应用

前言 计算机网络中的P2P&#xff08;Peer to Peer&#xff0c;点对点&#xff09;应用是一种去中心化的网络通信模式&#xff0c;它允许设备&#xff08;或节点&#xff09;直接连接并共享资源&#xff0c;而无需传统的客户端-服务器模型。 一、P2P技术原理 去中心化架构&#…

【技巧】优雅的使用 pnpm+Monorepo 单体仓库构建一个高效、灵活的多项目架构

单体仓库&#xff08;Monorepo&#xff09;搭建指南&#xff1a;从零开始 单体仓库&#xff08;Monorepo&#xff09;是一种将多个相关项目集中管理在一个仓库中的开发模式。它可以帮助开发者共享代码、统一配置&#xff0c;并简化依赖管理。本文将通过实际代码示例&#xff0…

包文件分析器 Webpack Bundle Analyzer

webpack-bundle-analyzer 是一个非常有用的工具&#xff0c;用于可视化和分析 Webpack 打包生成的文件。这使得开发者能够更好地理解应用的依赖关系、包的大小&#xff0c;以及优化打包的机会。以下是关于 webpack-bundle-analyzer 的详细介绍&#xff0c;包括它的安装、使用以…

重学SpringBoot3-WebClient配置与使用详解

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞??收藏评论 重学SpringBoot3-WebClient配置与使用详解 1. 简介2. 环境准备 2.1 依赖配置 3. WebClient配置 3.1 基础配置3.2 高级配置3.3 retrieve()和exchange()区别 4. 使用示例 4.1 基本请求操…

持续升级《在线写python》小程序的功能,文章页增加一键复制功能,并自动去掉html标签

增加复制按钮后的界面是这样的 代码如下&#xff1a; <template><view><x-header></x-header><view class"" v-if"article_info"><view class"kuai bgf"><view class"ac fs26"><img sr…

今天也是记录小程序进展的一天(破晓时8)

嗨嗨嗨朋友们&#xff0c;今天又来记录一下小程序的进展啦&#xff01;真是太激动了&#xff0c;项目又迈出了重要的一步&#xff0c;231啦&#xff01;感觉每一步的努力都在积累&#xff0c;功能逐渐完善&#xff0c;离最终上线的目标越来越近了。大家一直支持着这个项目&…

启动虚拟机中客户机后导致电脑蓝屏的解决办法

不考虑重新安装虚拟机的解决办法有两种&#xff1a; vmx文件破损时使用 1&#xff09;删除CentOS 64-bit.vmx文件 2&#xff09;打开vmware-0.log文件&#xff0c;找到CONFIGURATION 和 USER DEFAULTS 并把这两个之间的内容拷贝出来 删除框出来的部分&#xff0c;复制框出来的…

Word2Vec中的CBOW模型训练原理详细解析

Word2Vec中的CBOW模型训练原理详细解析 1. CBOW模型概述 CBOW模型的训练目标是利用一个单词周围的上下文单词来预测该单词本身。具体来说&#xff0c;给定当前单词的上下文单词&#xff0c;通过训练神经网络来最大化当前单词出现在这些上下文单词中的概率。 2. 模型结构 CB…

Android Studio打包APK

1.导出APK安装包 如果是首次打包&#xff0c;Create new 单击蓝色对话框右边文件夹&#x1f4c2;图标 &#xff0c;选择密钥保存路径&#xff0c;然后在下方File name对话框中填写您想要名称&#xff0c;再点击OK回到密钥创建对话框。 在此对话框中填写密码&#xff08;Passwo…

MySql字段的值是以逗号隔开的另一个表的主键关联查询

查询sql SELECT s.student_id, s.name, c.name as course_name FROM student s INNER JOIN course c ON FIND_IN_SET(c.course_id, s.course_id) > 0 WHERE 1 1;相似sql -- 翻译&#xff08;需要带条件&#xff0c;可用于字典翻译&#xff0c;但条件需要注意唯一性&#…

windows git bash 使用zsh 并集成 oh my zsh

参考了 这篇文章 进行配置&#xff0c;记录了自己的踩坑过程&#xff0c;并增加了 zsh-autosuggestions 插件的集成。 主要步骤&#xff1a; 1. git bash 这个就不说了&#xff0c;自己去网上下&#xff0c;windows 使用git时候 命令行基本都有它。 主要也是用它不方便&…

QD Laser携“Lantana”激光器参展SPIE光子学西部展2025,聚焦紧凑型设计

据悉&#xff0c;QD Laser公司将在2025年SPIE光子学西部展览会上展出其最新产品——世界最小一体化紧凑型可见光激光器“Lantana”。该展会将于1月28日至30日在旧金山的Moscone中心举行。 在展会期间&#xff0c;QD Laser公司将现场展示这款超小型、轻便设备—— “Lantana”。…

Ubuntu 22.04 TLS 忘记root密码,重启修改的解决办法

1.想办法进入这个界面&#xff0c;我这里是BIOS引导的是按Esc按一下就行&#xff0c;UEFI的貌似是按Shift不得而知&#xff0c;没操作过。下移到Advanced options for Ubuntu&#xff0c;按enter 2.根据使用的内核版本&#xff0c;选择带「recovery mode」字样的内核版本&#…

Proteus-8086调试汇编格式的一点心得

这阵子开始做汇编的微机实验&#xff08;微机原理与接口技术题解及实验指导&#xff0c;吴宁版本13章&#xff09;&#xff0c;中间出了挺多问题&#xff0c;解决后记录下。 先上电路图 用子电路来仿真发现仿真的时候子电路这块根本没有高低电平输出&#xff0c;只好把子电路拿…

外部flash烧写算法学习笔记(一)

一&#xff0c;STM32CubeProgrammer STM32下载编程工具 | STM32CubeProg介绍、下载、安装和使用教程 - 知乎 1.使用速览 2.外部烧写 二&#xff0c;QSPI外部烧写算法制作 STM32H7的花式玩转SPI Flash章节也更新了&#xff0c;含MDK下载算法制作和STM32CubeProg下载算法制作 …

在centos上编译安装opensips【初级-默认安装】

环境&#xff1a;centos9 last opensips3.2 dnf update -y dnf install -y gcc make git automake libtool pcre-devel libxml2-devel \libcurl-devel postgresql-devel \bzip2-devel zlib-devel ncurses-devel libuuid-devel \libpcap-devel # 有报错的直接删除cd /usr/lo…

【Prometheus】PromQL进阶用法

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

Fabric区块链网络搭建:保姆级图文详解

目录 前言1、项目环境部署1.1 基础开发环境1.2 网络部署 2、后台环境2.1、环境配置2.2、运行springboot项目 3、PC端3.1、安装依赖3.2、修改区块链网络连接地址3.3、启动项目 前言 亲爱的家人们&#xff0c;创作很不容易&#xff0c;若对您有帮助的话&#xff0c;请点赞收藏加…

【SpringCloud】黑马微服务学习笔记

目录 1. 关于微服务 ?1.1 微服务与单体架构的区别 ?1.2 SpringCloud 技术 2. 学习前准备 ?2.1 环境搭建 ?2.2 熟悉项目 3. 正式拆分 ?3.1 拆分商品功能模块 ?3.2 拆分购物车功能模块 4. 服务调用 ?4.1 介绍 ?4.2 RustTemplate?的使用 4.3 服务治理-注册中…

RabbitMQ1-消息队列

目录 MQ的相关概念 什么是MQ 为什么要用MQ MQ的分类 MQ的选择 RabbitMQ RabbitMQ的概念 四大核心概念 RabbitMQ的核心部分 各个名词介绍 MQ的相关概念 什么是MQ MQ(message queue)&#xff0c;从字面意思上看&#xff0c;本质是个队列&#xff0c;FIFO 先入先出&am…