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…...
ES10 新特性
1. Object.fromEntries Object.fromEntries() 方法把可迭代对象的键值对列表转换为一个对象。 语法: Object.fromEntries(iterable)iterable:类似 Array 、 Map 或者其它实现了可迭代协议的可迭代对象。返回值:一个由该迭代对象条目提供对应属性的新对象。相当于 Object.e…...
宝塔安装脚本
Centos安装脚本 yum install -y wget && wget -O install.sh https://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec Ubuntu/Deepin安装脚本 wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && sud…...

gulp打包vue3+jsx+less插件
最终转换结果如下 在根目录下添加gulpfile.js文件,package.json添加命令npm run gulp var gulp require(gulp) var babel require(gulp-babel) var less require(gulp-less) var del require(del); var spawn require(child_process).spawn;const outDir &…...

华为ICT——第四章深度学习和积卷神经
接第三章的末尾: 目录 接第三章的末尾: 1:自适应阈值分割: 2:形态处理: 4:膨胀: 5:腐蚀 6:开运算 7:闭运算 8:特征描述子 9…...
MongoDB 学习笔记(基础)
概论 出现背景:MongoDB 是文档型数据库,由于传统的关系型数据库(如 MySQL),在数据操作的“三高”需求以及应对 web 的网站需求面前显得有些吃力,在此环境下 MongoDB 出世了 三高需求: (1) 对数…...

【TGRS 2023】RingMo: A Remote Sensing Foundation ModelWith Masked Image Modeling
RingMo: A Remote Sensing Foundation Model With Masked Image Modeling, TGRS 2023 论文:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber9844015 代码:https://github.com/comeony/RingMo MindSpore/RingMo-Framework (gitee.com) …...

性能测试 —— 生成html测试报告、参数化、jvm监控
1.生成HTML的测试报告 1.1配置 (1)找到jmeter 的安装目录,下的bin中的jmeter.properties(jmeter配置文件) (2) ctrl f ,搜索jmeter.save.saveservice.output_format,取消井号 并且 把等号后的xml改为csv,…...

堆(二叉树,带图详解)
一.堆 1.堆的概念 2.堆的存储方式 逻辑结构 物理结构 2.堆的插入问题 3.堆的基本实现(代码)(以小堆为例) 1.堆的初始化 2. 向上调整 3.插入结点 4. 交换函数、堆的打印 5.向下调整 6.删除根节点并调整成小根堆 7.获取堆…...

vue3 code format bug
vue code format bug vue客户端代码格式化缺陷,为了方便阅读和维护,对代码格式化发现这个缺陷 vue.global.min.3.2.26.js var Vuefunction(r){"use strict";function e(e,t){const nObject.create(null);var re.split(",");for(le…...

7-3、S曲线生成器【51单片机控制步进电机-TB6600系列】
摘要:本节介绍步进电机S曲线生成器的计算以及使用 一.计算原理 根据上一节内容,已经计算了一条任意S曲线的函数。在步进电机S曲线加减速的控制中,需要的S曲线如图1所示,横轴为时间,纵轴为角速度,其中w0为起…...