第四天 Java 数组与排序

2023-10-27

一、 数组

数组(Array),是多个相同类型数据按一定顺序排列 的集合,并使用一个名字命名,并通过编号的方式 对这些数据进行统一管理。

1.数组的常见概念

  • 数组名
  • 下标(或索引)
  • 元素
  • 数组的长度

数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括 基本数据类型和引用数据类型。

  • 创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是 这块连续空间的首地址。
  • 数组的长度一旦确定,就不能修改。
  • 我们可以直接通过下标(或索引)的方式调用指定位置的元素,速度很快。
  • 数组的分类:
    按照维度: 一维数组、二维数组、三维数组、…
    按照元素的数据类型分: 基本数据类型元素的数组、引用数据类型元素的数组(即对象数组)

二、一维数组

1.1 一维数组的声明方式:

type var[] 或 type[] var;
例如:

int a[]; 
int[] a1; 
double b[]; 
String[] c; //引用类型变量数组 
Java语言中声明数组时不能指定其长度(数组中元素的数), 例如: int a[5]; //非法

1.2 一维数组的初始化:

1. 动态初始化

数组声明且为数组元素分配空间与赋值操作分开进行

int arr = new int[3];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
2. 静态初始化

在定义数组的同时就为数组分配空间赋值。

int arr =1,2,3;

int arr1 = new int[]{ 1,2,3};

在这里插入图片描述

1.3 一维数组内存解析

在这里插入图片描述

在这里插入图片描述

1.4 随机数的产生

//先导入随机数类:  
import java.util.Random;
//再创建随机类型的对象: 
Random obj = new Random();
//产生随机整数:  
 obj.nextInt(); 
 //产生执行范围的随机整数:                
 obj.nextInt( 种子数 )       
   产生 0 到 种子数前的任意随机整数          
 例如: obj.nextInt(5).0,1,2,3,4中产生一个随机数 
       Obj.nextInt(5)+1;1,2,3,4,5 中产生一个随机整数

三、多维数组的使用

Java 语言里提供了支持多维数组的语法。
如果说可以把一维数组当成几何中的线性图形, 那么二维数组就相当于是一个表格,像右图Excel 中的表格一样。
对于二维数组的理解,我们可以看成是一维数组 array1又作为另一个一维数组array2的元素而存 在。其实,从数组底层的运行机制来看,其实没 有多维数组。

1.二维数组[][]:数组中的数组

格式1(动态初始化):
int[][] arr = new int[3][2]; 
  • 定义了名称为arr的二维数组
  • 二维数组中有3个一维数组 每一个一维数组中有2个元素
  • 一维数组的名称分别为arr[0], arr[1], arr[2]
给第一个一维数组1脚标位赋值为78写法是:
arr[0][1] = 78;
格式2(动态初始化):int[][] arr = new int[3][]; 
  • 二维数组中有3个一维数组。
  • 每个一维数组都是默认初始化值null (注意:区别于格式1)
  • 可以对这个三个一维数组分别进行初始化
    arr[0] = new int[3]; arr[1] = new int[1]; arr[2] = new int[2];
  • 注:
    int[][]arr = new int[][3]; //非法
    注意特殊写法情况:int[] x,y[]; x是一维数组,y是二维数组。

2. 二维数组内存解析

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

四、数组中常见算法

1. 二分查找法

在这里插入图片描述

//二分法查找:要求此数组必须是有序的。
int[] arr3 = new int[]{-99,-54,-2,0,2,33,43,256,999};
boolean isFlag = true;
int number = 256;
//int number = 25;
int head = 0;//首索引位置
int end = arr3.length - 1;//尾索引位置
while(head <= end){
  int middle = (head + end) / 2;
  if(arr3[middle] == number){
  System.out.println("找到指定的元素,索引为:" + middle);
  isFlag = false;
  break; 
}else if(arr3[middle] > number){
    end = middle - 1;
}else{
  //arr3[middle] < number
  head = middle + 1;
} }
if(isFlag){
System.out.println("未找打指定的元素");
}

2. 排序算法

1)排序算法分类:内部排序和外部排序。
  • 内部排序:整个排序过程不需要借助于外部存储器(如磁盘等),所有排 序操作都在内存中完成。
  • 外部排序:参与排序的数据非常多,数据量非常大,计算机无法把整个排 序过程放在内存中完成,必须借助于外部存储器(如磁盘)。外部排序最 常见的是多路归并排序。可以认为外部排序是由多次内部排序组成。
2) 十大内部排序算法
选择排序 
    直接选择排序、堆排序 
交换排序 
    冒泡排序、快速排序 
插入排序 
     直接插入排序、折半插入排序、Shell排序 
归并排序 
桶式排序 
基数排序
3) 算法5大特征
  • 输入(Input) 有0个或多个输入数据,这些输入必须有清楚的描述和定义
  • 输出(Output) 至少有1个或多个输出结果,不可以没有输出结果
  • 有穷性(有限性,Finiteness) 算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤可以在可接受的时间内完成
  • 确定性(明确性,Definiteness) 算法中的每一步都有确定的含义,不会出现二义性
  • 可行性(有效性,Effectiveness) 算法的每一步都是清楚且可行的,能让用户用纸笔计算而求出答案
4) 排序实质:

假设含有n个记录的序列为{R1,R2,…,Rn},其相应的关键字序列为 {K1,K2,…,Kn}。将这些记录重新排序为{Ri1,Ri2,…,Rin},使得相应的关键 字值满足条Ki1<=Ki2<=…<=Kin,这样的一种操作称为排序。
通常来说,排序的目的是快速查找。
衡量排序算法的优劣:

  • 时间复杂度:分析关键字的比较次数和记录的移动次数
  • 空间复杂度:分析排序算法中需要多少辅助内存
  • 稳定性:若两个记录A和B的关键字值相等,但排序后A、B的先后次序保 持不变,则称这种排序算法是稳定的。
5)各种内部排序方法性能比较
  1. 从平均时间而言:快速排序最佳。但在最坏情况下时间性能不如堆排序和归并排序。
  2. 从算法简单性看:由于直接选择排序、直接插入排序和冒泡排序的算法比较简单,将其认为是简单算法。对于Shell排序、堆排序、快速排序和归并排序算法,其算法比较复杂,认为是复杂排序。
  3. 从稳定性看:直接插入排序、冒泡排序和归并排序时稳定的;而直接选择排序、快速排序、 Shell排序和堆排序是不稳定排序
  4. 从待排序的记录数n的大小看,n较小时,宜采用简单排序;而n较大时宜采 用改进排序。
6)排序算法的选择
  1. 若n较小(如n≤50),可采用直接插入或直接选择排序。
    当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插入,应选直接选择排序为宜。
  2. 若文件初始状态基本有序(指正序),则应选用直接插入、冒泡或随机的快速排 序为宜;
  3. 若n较大,则应采用时间复杂度为O(nlgn)的排序方法:快速排序、堆排序或 归并排序。

五、数组工具类的使用

java.util.Arrays类即为操作数组的工具类,包含了用来操作数组(比 如排序和搜索)的各种方法。

  1. boolean equals(int[] a,int[] b) 判断两个数组是否相等。
  2. String toString(int[] a) 输出数组信息。
  3. void fill(int[] a,int val) 将指定值填充到数组之中。
  4. void sort(int[] a) 对数组进行排序。
  5. int binarySearch(int[] a,int key) 对排序后的数组进行二分法检索指定的值。

例如:数组排序

//java.util.Arrays类的sort()方法提供了数组元素排序功能:
import java.util.Arrays;
public class SortTest {
  public static void main(String[] args) {
      int [] numbers = {5,900,1,5,77,30,64,700};
      Arrays.sort(numbers);
      for(int i = 0; i < numbers.length; i++){
          System.out.println(numbers[i]);
       } 
    }
 } 

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

第四天 Java 数组与排序 的相关文章

  • 按键时关闭 ModalWindow

    我希望能够在用户按下某个键 在我的例子中是 ESC 时关闭 ModalWindow 我有一个用于按键的 Javascript 侦听器 它调用取消按钮 ID 的单击事件 jQuery modalWindowInfo closeButtonId
  • Spring应用中Eureka健康检查的问题

    我正在开发一个基于 Spring 的应用程序 其中包含多个微服务 我的一个微服务充当尤里卡服务器 到目前为止一切正常 在我所有其他微服务中 用 EnableEurekaClient 我想启用这样的健康检查 应用程序 yml eureka c
  • Java 枚举与创建位掩码和检查权限的混淆

    我想将此 c 权限模块移植到 java 但是当我无法将数值保存在数据库中然后将其转换为枚举表示形式时 我很困惑如何执行此操作 在 C 中 我创建一个如下所示的枚举 public enum ArticlePermission CanRead
  • HSQL - 识别打开连接的数量

    我正在使用嵌入式 HSQL 数据库服务器 有什么方法可以识别活动打开连接的数量吗 Yes SELECT COUNT FROM INFORMATION SCHEMA SYSTEM SESSIONS
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • Java 集合的并集或交集

    建立并集或交集的最简单方法是什么Set在 Java 中 我见过这个简单问题的一些奇怪的解决方案 例如手动迭代这两个集合 最简单的单行解决方案是这样的 set1 addAll set2 Union set1 retainAll set2 In
  • java.lang.IllegalStateException:提交响应后无法调用 sendRedirect()

    这两天我一直在尝试找出问题所在 我在这里读到我应该在代码中添加一个返回 我做到了 但我仍然得到 java lang IllegalStateException Cannot call sendRedirect after the respo
  • 将 MOXy 设置为 JAXB 提供程序,而在同一包中没有属性文件

    我正在尝试使用 MOXy 作为我的 JAXB 提供程序 以便将内容编组 解组到 XML JSON 中 我创建了 jaxb properties 文件 内容如下 javax xml bind context factory org eclip
  • 当 OnFocusChangeListener 应用于包装的 EditText 时,TextInputLayout 没有动画

    不能比标题说得更清楚了 我有一个由文本输入布局包裹的 EditText 我试图在 EditText 失去焦点时触发一个事件 但是 一旦应用了事件侦听器 TextInputLayout 就不再对文本进行动画处理 它只是位于 editText
  • tomcat 中受密码保护的应用程序

    我正在使用 JSP Servlet 开发一个Web应用程序 并且我使用了Tomcat 7 0 33 as a web container 所以我的要求是tomcat中的每个应用程序都会password像受保护的manager applica
  • 在我的 Spring Boot 示例中无法打开版本 3 中的 Swagger UI

    我在 Spring Boot 示例中打开 swagger ui 时遇到问题 当我访问 localhost 8080 swagger ui 或 localhost 8080 root api name swagger ui 时出现这种错误 S
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 尝试将 Web 服务部署到 TomEE 时出现“找不到...的 appInfo”

    我有一个非常简单的项目 用于培训目的 它是一个 RESTful Web 服务 我使用 js css 和 html 创建了一个客户端 我正在尝试将该服务部署到 TomEE 这是我尝试部署时遇到的错误 我在这里做错了什么 刚刚遇到这个问题 我曾
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • 专门针对 JSP 的测试驱动开发

    在理解 TDD 到底是什么之前 我就已经开始编写测试驱动的代码了 在没有实现的情况下调用函数和类可以帮助我以更快 更有效的方式理解和构建我的应用程序 所以我非常习惯编写代码 gt 编译它 gt 看到它失败 gt 通过构建其实现来修复它的过程
  • Cucumber 0.4.3 (cuke4duke) 与 java + maven gem 问题

    我最近开始为 Cucumber 安装一个示例项目 并尝试使用 maven java 运行它 我遵循了这个指南 http www goodercode com wp using cucumber tests with maven and ja
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • 包 javax.el 不存在

    我正在使用 jre6 eclipse 并导入 javax el 错误 包 javax el 不存在 javac 导入 javax el 过来 这不应该是java的一部分吗 谁能告诉我为什么会这样 谢谢 米 EL 统一表达语言 是 Java
  • 长轮询会冻结浏览器并阻止其他 ajax 请求

    我正在尝试在我的中实现长轮询Spring MVC Web 应用程序 http static springsource org spring docs 2 0 x reference mvc html但在 4 5 个连续 AJAX 请求后它会

随机推荐

  • tcp客户/服务器回射程序之五-----用shutdown函数解决在批量方式下所引起的问题

    tcp客户 服务器回射程序之五 用shutdown函数解决在批量方式下所引起的问题 当我们把标准输出和标准输入重定向到文件来运行新的客户程序时 却发现输出文件总是小于输入文件 而对于回射服务器而言 它们应该相等 问题的起因在于我们对于EOF
  • python十个实战项目

    python项目练习一 即时标记 python项目练习二 画幅好画 python项目练习三 万能的XML python项目练习四 新闻聚合 python项目练习五 虚拟茶话会 python项目练习六 使用CGI进行远程编辑 python项目
  • 目标检测算法之YOLOv2损失函数详解

    前言 前面的YOLOv2推文详细讲解了YOLOv2的算法原理 但官方论文没有像YOLOv1那样提供YOLOv2的损失函数 难怪Ng说YOLO是目标检测中最难懂的算法 今天我们尝试结合DarkNet的源码来分析YOLOv2的损失函数 关键点回
  • 终于辞职了,全职ue了

    终于辞职了 然后 这几天睡得特别香 拿到了ue的offer 两万五 从年前开始 其实本来不想辞职 毕竟还是疫情 工作不好找 一年半简历也不好看 但是最终还是走了这一步 外因 1 全员降薪到80 士气打击的厉害 我觉得是不是自己飘了 以自己的
  • 搭建harbor私有镜像仓库

    一 环境准备 1 关闭防火墙 systemctl stop firewalld 禁止防火墙开机自起 systemctl disable firewalld 2 关闭selinux 永久关闭 sed i s enforcing disable
  • 简述Java中的基本数据类型

    本文主要向大家介绍一下Java中的8种基本数据类型 以及数据类型之间的转换 希望对大家学习Java语言有所帮助 一 数据类型的分类 一 基本数据类型 8种 注意 在Java中 所有数据类型都有默认值 定义之后没有赋值 就会有默认值 且默认值
  • 计算机心理活动,计算机科学系关于心理活动的总结

    计算机科学系关于心理活动总结 一 活动概况 时间 10月22 23 25 29 30日 11月5 6 12日 地点 新区湖畔绿地或老区西操场 人员 商丘师院10级新生以及各系心理委员组长 二 活动目的 1 通过游戏等活动的形式带给同学们人生
  • matlab中的符号表达式的使用

    定义了一个表达式 如 y sin x 如何让matlab知道x是自变量 y是因变量 并且y x0 这种格式合法 求出x x0时候的值 三种方法 1 用inline函数 格式 FunctionName inline 任何有效的表达式 表达式中
  • ITextRenderer 生成PDF 文件

    pom xml 文件添加相关依赖
  • django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required 简单的解决办法

    在Django的工程同名子目录的 init py文件中有如下语句 import pymysql pymysql install as MySQLdb 使用django2或者django3时遇到这个报错 django core excepti
  • LeetCode每日刷题:存在重复的元素II

    题目 给定一个整数数组和一个整数 k 判断数组中是否存在两个不同的索引 i 和 j 使得 nums i nums j 并且 i 和 j 的差的 绝对值 至多为 k 解题思路 这道题有三种解法 暴力 滑动窗口 Set 暴力解法 循环遍历数组
  • wifi密码本 字典(免费)

    需要自取 链接 https pan baidu com s 1ffGwfcvoqkrIgDIOeC3 IA 提取码 ao1i 破解fiwi密码教程 破解wifi密码 暴力破解 保姆式教学 Z Xshan的博客 CSDN博客 如果提取码失效试
  • push 和 pop 函数的使用

    include
  • PySOT单目标跟踪训练、测试、验证全流程(全网最详细,持续更新,建议收藏!)

    目录 数据集准备 数据集介绍 数据集下载解压 代码部署 训练 修改配置文件 开始训练 数据集准备 数据集介绍 PySOT支持多种数据集混合训练 其中包括以下四种数据集 VIDhttp image net org challenges LSV
  • linux安装zabbix,添加监测客户机

    一 linux系统配置 1 临时关闭seLinux setenforce 0 2 永久关闭selinux 需编辑配置文件 etc selinux config 设置SELINUX disabled 重启系统后生效 vi etc selinu
  • 使用Clang作为编译器 —— 使用 Clang 交叉编译

    使用 Clang 交叉编译 1 介绍 2 交叉编译问题 Cross compilation issues 3 Clang中的一般交叉编译选项 General Cross Compilation Options in Clang 3 1 Ta
  • 大数据模型交易平台---学生校园消费行为分析模型

    业务问题 大部分高校均基于校园一卡通系统进行 智慧校园 的相关建设 当前 学生作为一个特殊的群体 其饮食消费内容在社会大背景影响下日益多样化 而且在没有其他任何收入来源的时候 对消费的正确认识就显得尤为重要 校园一卡通就是体现学生消费行为的
  • Play With Docker

    文章目录 Play with Docker PWD 1 Getting Started The command you just ran What is a container What is a container image 2 Our
  • Windows 和 Linux 上安装 TTF 字体的方法

    前言 在之前的文章中 我们是通过引入字体文件的方法解决了平台字体兼容性的问题 有同学提出了一个问题 为什么要通文件引入的方式解决问题 难道不考虑带宽问题吗 其实 我们一开始考虑的方案是将字体文件安装在运行项目的每台客户机上 但是 因为使用项
  • 第四天 Java 数组与排序

    数组与排序 一 数组 1 数组的常见概念 二 一维数组 1 1 一维数组的声明方式 1 2 一维数组的初始化 1 动态初始化 2 静态初始化 1 3 一维数组内存解析 1 4 随机数的产生 三 多维数组的使用 1 二维数组 数组中的数组 2