Java学习笔记(五)——数组、排序和查找
一、数组
(一)数组的使用
1、使用方式1——动态初始化
2、使用方式2——动态初始化
3、使用方式3——静态初始化
(二)数组使用注意事项和细节
(三)数组赋值机制
(四)数组拷贝
(五)数组反转
(六)数组扩容
(七)数组缩减
二、排序
冒泡排序
三、查找
顺序查找
四、多维数组——二维数组
(一)二维数组的使用
1、使用方式1——动态初始化
2、使用方式2——动态初始化
3、使用方式3——动态初始化——列数不确定
4、使用方式4——静态初始化
(二)二维数组使用注意事项和细节
一、数组
数组可以存放多个同一类型的数据。数组也是一种数据类型,是引用类型。即数组就是一组数据。
(一)数组的使用
1、使用方式1——动态初始化
(1)数组的定义: 数据类型 数组名[] = new 数据类型[大小]
或 数据类型[] 数组名 = new 数据类型[大小]
int a[] = new int[5];
(2)数组的引用(使用):数组名[下标/索引/index]
import java.util.Scanner;
public class Array02{public static void main(String[] args){Scanner myScanner = new Scanner(System.in);double scores[] = new double[5];for(int i = 0; i < scores.length; i++){System.out.print("请输入第" + (i + 1) + "个元素的值:");scores[i] = myScanner.nextDouble();}System.out.println("当前数组的值如下:");for(int i = 0; i < scores.length; i++){System.out.print(scores[i] + " ");}}
}
2、使用方式2——动态初始化
(1)先声明数组: 数据类型 数组名[]; 或 数据类型[] 数组名;
int a[];
(2)创建数组: 数组名 = new 数据类型[大小];
a = new int[10];
import java.util.Scanner;
public class Array03{public static void main(String[] args){Scanner myScanner = new Scanner(System.in);double scores[]; //声明数组,这时scores是nullscores = new double[5]; // 分配内存空间,可以存放数据for(int i = 0; i < scores.length; i++){System.out.print("请输入第" + (i + 1) + "个元素的值:");scores[i] = myScanner.nextDouble();}System.out.println("当前数组的值如下:");for(int i = 0; i < scores.length; i++){System.out.print(scores[i] + " ");}}
}
3、使用方式3——静态初始化
(1)初始化数组: 数据类型 数组名[] = {元素值,元素值...}
int a[] = {2,5,6,7,8,89,90,34,56}
上面的用法相当于:int a[] = new int[9];
a[0] = 2; a[1] = 5; a[2] = 6; a[3] = 7; a[4] = 8; a[5] = 89; a[6] = 90; a[7] = 34; a[8] = 56;
public class Array01{public static void main(String[] args){double hens[] = {3, 5, 1, 3.4, 2, 50};double sum = 0;for(int i = 0; i < hens.length; i++){sum += hens[i];}System.out.println("sum=" + sum + ",avg=" + sum/hens.length);}
}
(二)数组使用注意事项和细节
1、数组是多个相同类型数据的组合,实现对这些数据的统一管理。
2、数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用。
![]()
3、数组创建后,如果没有赋值,有默认值。int 0,short 0,byte 0,long 0,float 0.0,double 0.0,
char \u0000,boolean false,String null
4、使用数组的步骤:(1)声明数组并开辟空间 (2)给数组各个元素赋值 (3)使用数组
5、数组的下标是从0开始的。
6、数组下标必须在指定范围内使用,否则报下标越界异常,比如int arr[] = new int[5];的有效下标为0-4。
7、数组属于引用类型,数组型数据是对象(object)
(三)数组赋值机制
1、基本数据类型赋值,这个值就是具体的数据,而且相互不影响。(值传递/值拷贝)


2、数组在默认情况下是引用传递,赋的值是地址。
public class Array06{public static void main(String[] args){int arr1[] = {1,2,3,4,5};int arr2[] = arr1;arr2[0] = 10;for(int i = 0; i < arr1.length; i++){System.out.print(arr1[i] + " ");}}
}


(四)数组拷贝
将arr1拷贝到arr2,要求数据空间是独立的。
public class Array07{public static void main(String[] args){int arr1[] = {1,2,3};// 开辟一个和arr1一样大的数组int arr2[] = new int[arr1.length];for(int i = 0; i < arr1.length; i++){arr2[i] = arr1[i];}// 修改arr2[0]arr2[0] = 10;// 修改arr2不会影响arr1System.out.print("arr1的元素为:");for(int i = 0; i < arr1.length; i++){System.out.print(arr1[i] + " ");}System.out.println();System.out.print("arr2的元素为:");for(int i = 0; i < arr2.length; i++){System.out.print(arr2[i] + " ");}}
}

(五)数组反转
public class Array08{public static void main(String[] args){int arr[] = {1,2,3,4,5};int temp = 0;int len = arr.length;for(int i = 0; i < len/2; i++){temp = arr[i];arr[i] = arr[len - 1 - i];arr[len - 1 - i] = temp;}for(int i = 0; i < len; i++){System.out.print(arr[i] + " ");}}
}
![]()
(六)数组扩容
要求:动态地给数组添加元素效果,实现对数组扩容。
(1)原始数组使用静态分配 int arr[] = {1,2,3};
(2)增加元素4,直接放在数组的最后
(3)用户可以通过如下方法来决定是否继续添加,添加成功,是否继续?y/n

public class Array09{public static void main(String[] args){int arr[] = {1,2,3};int arrNew[] = new int[arr.length + 1];for(int i = 0; i < arr.length; i++){arrNew[i] = arr[i];}arrNew[arrNew.length - 1] = 4;arr = arrNew;System.out.print("arr数组的元素为:");for(int i = 0; i < arr.length; i++){System.out.print(arr[i] + " ");}}
}
![]()
// 数组扩容
import java.util.Scanner;
public class Array10{public static void main(String[] args){int arr[] = {1,2,3};char choose = 'n';do{System.out.print("请输入需要添加的数字:");Scanner myScanner = new Scanner(System.in);int newNum = myScanner.nextInt();int arrNew[] = new int[arr.length + 1];for(int i = 0; i < arr.length; i++){arrNew[i] = arr[i];}arrNew[arrNew.length - 1] = newNum;arr = arrNew;System.out.print("添加后的数组元素如下:");for(int i = 0; i < arr.length; i++){System.out.print(arr[i] + " ");}System.out.println();System.out.print("是否继续添加(y/n):");choose = myScanner.next().charAt(0);}while(choose == 'y');}
}

使用链表可以优化
(七)数组缩减
要求:有一个数组,可以将该数组进行缩减,提示用户是否继续缩减,每次缩减最后那个元素。当只剩下最后一个元素,提示不能再缩减。
// 数组缩减
import java.util.Scanner;
public class Array11{public static void main(String[] args){int arr[] = {1,2,3,4,5,6,7};System.out.print("当前的数组元素如下:");for(int i = 0; i < arr.length; i++){System.out.print(arr[i] + " ");}System.out.println();System.out.print("是否缩减数组(y/n):");Scanner myScanner = new Scanner(System.in);char choose = myScanner.next().charAt(0);while(choose == 'y'){if(arr.length == 1){System.out.print("数组元素只剩一个,不能再继续缩减");break;}int arrNew[] = new int[arr.length - 1];for(int i = 0; i < arrNew.length; i++){arrNew[i] = arr[i];}arr = arrNew;System.out.print("缩减后的数组元素如下:");for(int i = 0; i < arr.length; i++){System.out.print(arr[i] + " ");}System.out.println();System.out.print("是否继续缩减(y/n):");choose = myScanner.next().charAt(0);}}
}

二、排序
排序是将一群数据,依指定的顺序进行排列的过程。
排序的分类:
1、内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序,包括交换式排序法、选择式排序法和插入式排序法。
2、外部排序:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序,包括合并排序法和直接合并排序法。
冒泡排序
基本思想:通过对待排序列从后向前(从下标较大的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就像水底下的气泡一样逐渐向上冒。
// 冒泡排序
import java.util.Scanner;
public class BubbleSort{public static void main(String[] args){int arr[] = {24,69,80,57,13};int temp;for(int i = 0; i < arr.length; i++){for(int j = 0; j < arr.length - i - 1; j++){if(arr[j] > arr[j + 1]){temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}for(int i = 0; i < arr.length; i++){System.out.print(arr[i] + " ");}}
}
![]()
三、查找
常用的查找有两种:顺序查找、二分查找
顺序查找
案例:有一个数列:白眉鹰王、金毛狮王、紫衫龙王、青翼蝠王。猜数游戏:从键盘中任意输入一个名称,判断数列中是否包含此名称。要求:如果找到了,就提示找到,并给出下标值。
// 顺序查找
import java.util.Scanner;
public class SeqSearch{public static void main(String[] args){String arr[] = {"白眉鹰王","金毛狮王","紫衫龙王","青翼蝠王"};System.out.print("请输入名字:");Scanner myScanner = new Scanner(System.in);String name = myScanner.next();boolean flag = true;for(int i = 0; i < arr.length; i++){if(name.equals(arr[i])){System.out.println("已找到该名字,下标值为:" + i);flag = false;break;}}if(flag){System.out.println("找不到该名字");}}
}

四、多维数组——二维数组
(一)二维数组的使用
1、使用方式1——动态初始化
语法: 类型 数组名[][] = new 类型[大小][大小]
int a[][] = new int[2][3];

2、使用方式2——动态初始化
(1)先声明:类型 数组名[][];
(2)再定义(开辟空间)数组名[][] = new 类型[大小][大小];
(3)赋值(有默认值)
3、使用方式3——动态初始化——列数不确定
动态创建下面二维数组:

public class TwoDimensionArray02{public static void main(String[] args){int arr[][] = new int[3][];for(int i = 0; i < arr.length; i++){arr[i] = new int[i + 1];for(int j = 0; j < arr[i].length; j++){arr[i][j] = i + 1;}}for(int i = 0; i < arr.length; i++){for(int j = 0; j < arr[i].length; j++){System.out.print(arr[i][j] + " ");}System.out.println();}}
}
4、使用方式4——静态初始化
public class TwoDimensionArray01{public static void main(String[] args){int arr[][] = {{0, 0, 0, 0, 0, 0},{0, 0, 1, 0, 0, 0},{0, 2, 0, 3, 0, 0},{0, 0, 0, 0, 0, 0}};for(int i = 0; i < arr.length; i++){for(int j = 0; j < arr[i].length; j++){System.out.print(arr[i][j] + " ");}System.out.println();}}
}

(二)二维数组使用注意事项和细节
1、一维数组的声明方式有:int[] x 或 int x[]
2、二维数组的声明方式有:int[][] y 或 int[] y[] 或 int y[][]
3、二维数组实际上是由多个一维数组组成的,它的各个一维数组的长度可以相同,也可以不相同。比如:map [][] = {{1,2},{3,4,5}};有map[0]是一个含有两个元素的一维数组,map[1]是一个含有三个元素的一维数组构成,也称为列数不等的二维数组。
相关文章:
Java学习笔记(五)——数组、排序和查找
一、数组 (一)数组的使用 1、使用方式1——动态初始化 2、使用方式2——动态初始化 3、使用方式3——静态初始化 (二)数组使用注意事项和细节 (三)数组赋值机制 (四)数组拷贝…...
python输出与数据类型
目标 1、使用print输出内容 2、熟悉字符串类型 3、熟悉数字类型 4、熟悉数字与字符串操作 输出 print可控制输出内容也可配合、-、*、/进行运算,和整数型配合可进行运算和字符型配合有不同效果,如为拼接,*为多次输出注:整数型如&…...
React-Redux总结含购物车案例
React-Redux总结含购物车案例 reduc简介 redux是react全家桶的一员,它为react给i共可预测化的状态管理机制。redux是将整个应用状态存储到一个地方,成为store,里面存放着一颗树状态(state,tree),组件可以派发dispatch行为action给store,而不是直接通知其…...
攻克组合优化问题!美国DARPA选中全栈量子经典计算公司Rigetti
(图片来源:网络) 近日,美国量子计算公司Rigetti宣布,它被美国国防高级研究计划局 (DARPA) 选中,加入想象未来量子实际应用 (IMPAQT) 计划,推进先进量子算法的研发,去解决组合优化问…...
Kafka - 深入了解Kafka基础架构:Kafka的基本概念
文章目录 Kafka的基本概念 Kafka的基本概念 我们首先了解一些Kafka的基本概念。 1)Producer :消息生产者,就是向kafka broker发消息的客户端2)Consumer :消息消费者,向kafka broker获取消息的客户端3&…...
[Docker]二.Docker 镜像,仓库,容器介绍以及详解
一.Docker 镜像,容器,仓库的简单介绍 通俗来讲:镜像相当于VM虚拟机中的ios文件,容器相当于虚拟机系统,仓库相当于系统中的进程或者执行文件,容器是通过镜像创建的 1.镜像 Docker 镜像就是一个 Linux 的文件系统( Root FileSystem ),这个文…...
软考高级系统架构设计师系列之:案例分析典型试题一
软考高级系统架构设计师系列之:案例分析典型试题一 一、案例分析考试大纲二、结构化软件系统建模1.案例试题2.案例试题分析3.案例试题参考答案三、联合需求分析会议1.案例试题2.案例试题分析3.案例试题参考答案四、电子政务1.案例试题2.案例试题分析3.案例试题参考答案五、软件…...
2023年5个美国代理IP推荐,最佳代理花落谁家?
美国代理IP指的是代理服务器位于美国的IP地址,对于跨境业务来说,这些代理IP地址可以用于隐藏用户的真实IP地址,将其网络流量路由通过美国的服务器,以实现一些特定的目的。由于近年来,面向美国市场的跨境商家越来越多&a…...
github.com/holiman/uint256 源码阅读
github.com/holiman/uint256 源码阅读 // uint256: Fixed size 256-bit math library // Copyright 2018-2020 uint256 Authors // SPDX-License-Identifier: BSD-3-Clause// Package math provides integer math utilities.package uint256import ("encoding/binary&…...
排序-表排序
当我们需要对一个很大的结构体进行排序时,因为正常的排序需要大量的交换,这就会造成时间复杂度的浪费 因此,我们引入指针,通过指针临时变量的方式来避免时间复杂度的浪费 间接排序-排序思路:通过开辟一个指针数组&…...
勒索病毒最新变种.locked1勒索病毒来袭,如何恢复受感染的数据?
引言: 在当今数字化时代,网络威胁不断进化,.locked1勒索病毒就是其中一种常见的恶意软件。这种病毒会加密您的文件,然后勒索赎金以解锁它们。本文将详细介绍.locked1勒索病毒,包括如何恢复被加密的数据文件和如何预防…...
信号补零对信号频谱的影响
文章目录 前言一、 什么是补零二、案例三、补零前仿真及分析1、补零前 MATLAB 源码2、仿真及结果分析①、 x n x_n xn 时域图②、 x n x_n xn 频谱图 四、补零后仿真及分析1、补6000个零且1000采样点①、 MATLAB 源码②、仿真及结果分析 2、波形分辨率3、补6000个零且7000采…...
【Gan教程 】 什么是变分自动编码器VAE?
名词解释:Variational Autoencoder(VAE) 一、说明 为什么深度学习研究人员和概率机器学习人员在讨论变分自动编码器时会感到困惑?什么是变分自动编码器?为什么围绕这个术语存在不合理的混淆?本文从两个角度…...
T113-S3-buildroot文件系统tar解压缩gz文件
目录 前言 一、现象描述 二、解决方案 三、tar解压缩.gz文件 总结 前言 本文主要介绍全志T113-S3平台官方SDK,buildroot文件系统tar不支持.gz文件解压缩的问题以及如何配置buildroot文件系统解决该问题的方法介绍。 一、现象描述 在buildroot文件系统中ÿ…...
软件测试面试题:压测时,QPS一直上不去,如何排查?
在进行系统压测时,QPS(Queries Per Second)即每秒查询数,无法达到预期值是一个常见的问题,本文就来介绍下QPS一直上不去时应该如何排查。 一. 检查硬件资源 CPU使用率 使用top或nmon命令来查看CPU使用率。如果CPU使…...
探索JavaScript ES6+新特性
JavaScript是一门十分流行的编程语言,它不断发展演变以适应现代Web开发需求。ES6(也称为ECMAScript 2015)是JavaScript的第六个版本,引入了许多令人兴奋的新特性和语法糖。本文将介绍一些ES6中最有趣和实用的特性。 箭头函数 箭…...
Elasticsearch常见错误
一 read_only_allow_delete" : "true" 当我们在向某个索引添加一条数据的时候,可能(极少情况)会碰到下面的报错: {"error": { "root_cause": [ { "type": "cluster_block_exception", "r…...
mysql源码编译安装
下载地址:http://dev.mysql.com/downloads/mysql/5.1.html#downloads 免费版,只能下载mysql社区版。MySQL Community Server 选择合适的版本迚行下载: 安装前,如果不存在mysql 用户,则建立之 [rootlocalhost ~]# useradd mys…...
On Moving Object Segmentation from Monocular Video with Transformers 论文阅读
论文信息 标题:On Moving Object Segmentation from Monocular Video with Transformers 作者: 来源:ICCV 时间:2023 代码地址:暂无 Abstract 通过单个移动摄像机进行移动对象检测和分割是一项具有挑战性的任务&am…...
[AutoSar NVM] 存储架构
依AutoSAR及公开知识辛苦整理,禁止转载。 专栏 《深入浅出AutoSAR》, 全文 2900 字. 图片来源: 知乎 汽车的ECU内存中有很多不同类型的变量,这些变量包括了车辆各个系统和功能所需的数据。大部分变量在ECU掉电后就会丢失&#x…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
技术栈RabbitMq的介绍和使用
目录 1. 什么是消息队列?2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
