Java 数组(详细)

目录

一、数组的概述

1. 数组的理解:

2. 数组相关的概念:

3. 数组的特点:

4. 数组的分类:

5.数据结构:

二、一维数组

1. 一维数组的声明与初始化

2. 一维数组元素的引用:

3. 数组的属性:

4.一维数组的遍历

4.1 For-Each 循环

5.一维数组元素的默认初始化值

6.一维数组的内存结构

 7.一维数组的操作示例

三、二维数组

1.如何理解二维数组?

2.二维数组的声明与初始化

3.如何调用二维数组元素:

4.二维数组的属性:length

5.遍历二维数组元素

6.二维数组元素的默认初始化值

四、数组的常见算法

1. 数组的创建与元素赋值:

2. 针对于数值型的数组:

3. 数组的赋值与复制

4.数组中指定元素的查找:搜索,检索

4.1 线性查找:

4.2 二分法查找:

五.数组的排序算法


一、数组的概述

1. 数组的理解:

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

2. 数组相关的概念:

数组名 元素  角标、下标、索引 数组的长度:元素的个数

3. 数组的特点:

  1. 数组是序排列的
  2. 数组属于引用数据类型的变量。数组的元素,既可以是基本数据类型,也可以是引用数据类型
  3. 创建数组对象会在内存中开辟一整块连续的空间
  4. 数组的长度一旦确定,就不能修改。

4. 数组的分类:

① 按照维数:一维数组、二维数组、。。。

② 按照数组元素的类型:基本数据类型元素的数组、引用数据类型元素的数组

5.数据结构:

  1. 数据与数据之间的逻辑关系:集合(关系很弱)、一对一(数组里面的元素)、一对多(二叉树)、多对多(社交网络)
  2. 数据的存储结构: 线性表:顺序表(比如:数组)、链表、栈、队列 树形结构:二叉树 图形结构:

二、一维数组

1. 一维数组的声明与初始化

正确的方式:

        int num;//声明num=10;//初始化int id=101;//声明+初始化int[]ids;//声明//1、静态初始化:数组的初始化和数组元素的赋值操作同时进行ids=new int[]{101,102,103,104};//2、动态初始化:数组的初始化和元素的赋值操作分开进行String[]name=new String[5];int[]arr={1,2,3,4,5};

错误的方式:

//int[] arr1 = new int[];
//int[5] arr2 = new int[5];
//int[] arr3 = new int[3]{1,2,3};

2. 一维数组元素的引用:

通过角标的方式调用。(数组的角标(或索引从0开始的,到数组的长度-1结束)

names[0] = "王铭";
names[1] = "王赫";
names[2] = "张学良";
names[3] = "孙居龙";
names[4] = "王宏志";

3. 数组的属性:

数组的属性:length

System.out.printIn(name.length);
System.out.printIn(ids.length);

说明: 数组一旦初始化,其长度就是确定的。arr.length 数组长度一旦确定,就不可修改。

4.一维数组的遍历

for(int i = 0;i < names.length;i++){System.out.println(names[i]); 
}

4.1 For-Each 循环

JDK 1.5 引进了一种新的循环类型,被称为 For-Each 循环或者加强型循环,它能在不使用下标的情况下遍历数组。

语法格式如下:

for(type element: array)
{System.out.println(element);
}

 实例:

        int[] arr=new int[]{1,2,3};for (int e:arr) {System.out.println(e);}

5.一维数组元素的默认初始化值

  • 数组元素是整型:0
  • 数组元素是浮点型:0.0
  • 数组元素是char型:0或'\u0000',而非'0'
  • 数组元素是boolean型:false
  • 数组元素是引用数据类型:nul

6.一维数组的内存结构

上图给出java程序执行时的内存分配。图中有栈,堆,方法区,各区域分别存储的数据有:

  • 栈:保存局部变量;
  • 堆:保存new出的对象
  • 方法区
    • 常量池:字符常量,如字符串;
    • 静态域:静态变量

 

 7.一维数组的操作示例

 该实例完整地展示了如何创建、初始化和操纵数组:

 public static void main(String[] args) {double[] myList = {1.9, 2.9, 3.4, 3.5};// 打印所有数组元素for (int i = 0; i < myList.length; i++) {System.out.println(myList[i] + " ");}// 计算所有元素的总和double total = 0;for (int i = 0; i < myList.length; i++) {total += myList[i];}System.out.println("Total is " + total);// 查找最大元素double max = myList[0];for (int i = 1; i < myList.length; i++) {if (myList[i] > max) max = myList[i];}System.out.println("Max is " + max);}

三、二维数组

1.如何理解二维数组?

数组属于引用数据类型 数组的元素也可以是引用数据类型 一个一维数组A的元素如果还是一个一维数组类型的,则,此数组A称为二维数组。

2.二维数组的声明与初始化

正确的方式:

        int[]arr=new int[]{1,2,3};//一维数组的静态初始化//二维数组的静态初始化int[][] arr1=new int[][]{{1,2,3},{4,5,6},{7,8,9}};//动态初始化1String[][]arr2=new String[2][3];//动态初始化2String[][]arr3=new String[3][];//其他:不标准但是有效int[]arr4[]=new int[][]{{1,2},{3,4},{5,6}};System.out.println(arr4[1][1]);//输出:4int []arr5[]={{1,2},{3,4},{5,6}};System.out.println(arr5[0][0]);//输出:1

3.如何调用二维数组元素:

System.out.println(arr1[0][1]);//2
System.out.println(arr2[1][1]);//nullarr3[1] = new String[4];
System.out.println(arr3[1][0]);
System.out.println(arr3[0]);

4.二维数组的属性:length

        int[][] arr1=new int[][]{{1,2,3},{4,5,6}};System.out.println(arr1.length);//2System.out.println(arr1[0].length);//3

5.遍历二维数组元素

for(int i = 0;i < arr4.length;i++){for(int j = 0;j < arr4[i].length;j++){System.out.print(arr4[i][j] + "  ");}System.out.println();
}

6.二维数组元素的默认初始化值

  • 二维数组分为外层数组的元素,内层数组的元素
  • int[][] arr = new int[4][3];
  • 外层元素:arr[0],arr[1]等
  • 内层元素:arr[0][0],arr[1][2]等
  •   数组元素的默认初始化值
  • 针对于初始化方式一:比如:int[][] arr = new int[4][3];
  • 外层元素的初始化值为:地址值
  • 内层元素的初始化值为:与一维数组初始化情况相同
  • 针对于初始化方式二:比如:int[][] arr = new int[4][];
  • 外层元素的初始化值为:null
  •  内层元素的初始化值为:不能调用,否则报错。

四、数组的常见算法

1. 数组的创建与元素赋值:

        //杨辉三角// 1.新建二维数组,动态初始化int [][]yanghui=new int[10][];// 2. 为二维数组赋值for (int i = 0; i < yanghui.length; i++) {yanghui[i]=new int[i+1];            // 为其余元素赋值for (int j = 1; j < yanghui[i].length; j++) {//yanghui[i][j] = j;}}// 3.打印输出二维数组for (int[] ints : yanghui) {for (int j = 1; j < ints.length; j++) {// 第0个位置没有元素System.out.print(ints[j] + " ");}System.out.println();}

运行结果: 


1 2 
1 2 3 
1 2 3 4 
1 2 3 4 5 
1 2 3 4 5 6 
1 2 3 4 5 6 7 
1 2 3 4 5 6 7 8 
1 2 3 4 5 6 7 8 9 

2. 针对于数值型的数组:

最大值、最小值、总和、平均数等

// 1.找到数组中的最大值
int maxArr = arr[0];
for (int i = 0; i < arr.length; i++) {if (maxArr < arr[i]) {maxArr = arr[i];}
}
System.out.println("数组中的最大值为:" + maxArr);// 2.找到数组中的最小值int minArr = arr[0];
for (int i = 0; i < arr.length; i++) {if (minArr > arr[i]) {minArr = arr[i];}
}
System.out.println("数组中的最小值为:" + minArr);// 3.找到数组中的平均数
int num = 0;
for (int i = 0; i < arr.length; i++) {num += arr[i];
}
System.out.println("数组的平均数为:" + (num / arr.length));// 4.求总和
int num1 = 0;
for (int i = 0; i < arr.length; i++) {num1 += arr[i];
}
System.out.println("数组的总和为:" + num1);

3. 数组的赋值与复制

// 1.数组的赋值
String[] str1 = new String[5];
str1 = str;
str1[2] = "AA";
for (int i = 0; i < str1.length; i++) {System.out.print(str[i] + " ");
}
System.out.println();

如何理解:将array1保存的数组的地址值赋给了array2,使得array1和array2共同指向堆空间中的同一个数组实体。

// 1.1数组的复制
for (int i = 0; i < str1.length; i++) {str1[i] = str[i];System.out.print(str1[i] + " ");
}

4.数组中指定元素的查找:搜索,检索

4.1 线性查找:

实现思路:通过遍历的方式,一个一个的数据进行比较、查找。 适用性:具有普遍适应性

4.2 二分法查找:

实现思路:每次比较中间值,折半的方式检索。 适用性:(前提:数组必须有序)

五.数组的排序算法

十大排序算法

  • 选择排序:

    • 直接选择排序、堆排序
  • 交换排序:

    • 冒泡排序、快速排序
  • 插入排序:

    • 直接插入排序、折半插入排序、希尔排序
  • 归并排序

  • 桶排序

  • 基数排序

衡量排序算法的优劣:

​ 时间复杂度、空间复杂度、稳定性

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Scikit-Learn逻辑回归

Scikit-Learn逻辑回归 1、逻辑回归概述1.1、逻辑回归1.2、逻辑回归的优缺点1.3、逻辑回归与线性回归2、逻辑回归的原理2.1、逻辑回归的概念与原理2.2、逻辑回归的损失函数2.3、梯度下降法求解逻辑回归的最优解3、Scikit-Learn逻辑回归3.1、决策边界3.2、Scikit-Learn逻辑回归AP…

【Java数据结构 -- 二叉树+树的深度优先遍历】

二叉树 1. 二叉树1.1 二叉树的介绍1.2 两种特殊的二叉树1.3 二叉树的性质1.4 二叉树的存储 2. 二叉树的基本操作2.1 二叉树的创建2.2 二叉树的优先遍历2.3 递归实现二叉树遍历2.4 用非递归实现二叉树遍历 1. 二叉树 1.1 二叉树的介绍 二叉树是一种数据结构&#xff0c;一颗二…

小朋友来自多少小区 - 华为OD统一考试(C卷)

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 100分 题解&#xff1a; Java / Python / C 题目描述 幼儿园组织活动&#xff0c;老师布置了一个任务&#xff1a; 每个小朋友去了解与自己同一个小区的小朋友还有几个。 我们将这些数量汇总到数组 garden 中。 请…

学生宿舍管理小程序|基于微信小程序的学生宿舍管理系统设计与实现(源码+数据库+文档)

学生宿舍管理小程序目录 目录 基于微信小程序的学生宿舍管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员模块的实现 &#xff08;1&#xff09;学生信息管理 &#xff08;2&#xff09;公告信息管理 &#xff08;3&#xff09;宿舍信息管理 &am…

《系统架构设计师教程(第2版)》第5章-软件工程基础知识-05-净室软件工程(CSE)

文章目录 1. 概述2. 理论基础2.1 函数理论2.2 抽样理论 3. 技术手段3.1 增量式开发3.2 基于函数的规范与设计3.3 正确性验证3.4 统计测试 (Statistically Based Testing) 和软件认证 4. 应用与缺点1&#xff09;太理论化2&#xff09;缺少传统模块测试3&#xff09;带有传统软件…

UE学习笔记--解决滚轮无法放大蓝图、Panel等

我们发现有时候创建蓝图之后&#xff0c;右上角的缩放是1&#xff1a;1 但是有时候我们可能需要放的更大一点。 发现一直用鼠标滚轮像上滚动&#xff0c;都没有效果。 好像最大只能 1&#xff1a;1. 那是因为 UE 做了限制。如果希望继续放大&#xff0c;我们可以按住 Ctrl 再去…

StarRocks实战——携程酒店实时数仓

目录 一、实时数仓 二、实时数仓架构介绍 2.1 Lambda架构 2.2 Kappa架构 三、携程酒店实时数仓架构 3.1 架构选型 3.2 实时计算引擎选型 3.3 OLAP选型 四、携程酒店实时订单 4.1 数据源 4.2 ETL数据处理 4.3 应用效果 4.4 总结 原文大佬的这篇实时数仓建设案例有借…

【计算机网络_应用层】TCP应用与相关API守护进程

需要云服务器等云产品来学习Linux的同学可以移步/–>腾讯云<–/官网&#xff0c;轻量型云服务器低至112元/年&#xff0c;优惠多多。&#xff08;联系我有折扣哦&#xff09; 文章目录 1. 相关使用接口2. 代码实现2.1 日志组件2.2 Server端2.3 Client端2.3 bug解决 3. 守…

JVM类加载机制以及双亲委派模型的介绍

目录 1.类加载介绍 2.具体步骤 2.1加载 2.2验证 2.3准备 2.4解析 2.5初始化 3.加载过程中的策略-双亲委派模型 1.类加载介绍 类加载,指的是Java进程在运行的时候,把.class文件从硬盘读取到内存,并进行一系列校验解析的过程. .class文件>类对象.硬盘>内村 类加载…

智能驾驶规划控制理论学习03-基于采样的规划方法

目录 一、基于采样的规划方法概述 二、概率路图&#xff08;PRM&#xff09; 1、核心思想 2、实现流程 3、算法描述 4、节点连接处理 5、总结 三、快速搜索随机树&#xff08;RRT&#xff09; 1、核心思想 2、实现流程 3、总结 4、改进RRT算法 ①快速搜索随机图&a…

运筹学_1.1.2 线性规划问题-图解法

1.1.2 线性规划问题-图解法 一、图解法求解步骤&#xff08;只适用于两个决策变量问题&#xff09;二、图解法作图实例三、图解法分析线性规划几种解的情况1、唯一最优解2、无穷多最优解3、无界解4、无解或无可行解 四、图解法的几点启示 一、图解法求解步骤&#xff08;只适用…

深入浅出Redis(一):对象与数据结构

引言 Redis是一款基于键值对的数据结构存储系统&#xff0c;它的特点是基于内存操作、单线程处理命令、IO多路复用模型处理网络请求、键值对存储与简单丰富的数据结构等等 这篇文章主要围绕Redis中的对象与数据结构来详细说明键值对存储与简单丰富的数据结构这两大特点 Redi…

运筹学_1.1.4 线性规划问题-解的概念

1.1.4 线性规划问题-解的概念 一、可行解与最优解二、基的概念三、基变量、基向量&#xff1b;非基变量、非基向量&#xff1b;基解、基可行解&#xff1b;四、最优解与可行解、基可行解的关系五、用例题&#xff08;枚举法&#xff09;巩固基解、基可行解、最优解三个概念1、例…

5、DVWA代码审计(2)

一、csrf 1、csrf(low) 限制 复现 GET /vulnerabilities/csrf/?password_new123456&password_conf123456&ChangeChange HTTP/1.1 Host: ddd.com Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,…

电子电器架构 —— DoIP协议相关的介绍

电子电器架构 —— DoIP协议相关的介绍 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无需有人关注你。你必须承认自己的价值,你不能站在他人的角度来反对自己。人生在世,最怕…

vue3编写H5适配横竖屏

具体思路如下&#xff1a; 1、监听浏览器屏幕变化&#xff0c;通过监听屏幕宽高&#xff0c;辨别出是横屏&#xff0c;还是竖屏状态 在项目的起始根页面进行监听&#xff0c;我就是在App.vue文件下进行监听 代码如下&#xff1a; <template><RouterView /> <…

【Spring IoC】实验四:特殊值处理

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

C++ //练习 10.16 使用lambda编写你自己版本的biggies。

C Primer&#xff08;第5版&#xff09; 练习 10.16 练习 10.16 使用lambda编写你自己版本的biggies。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /*******************************************************************…

BERTopic安装最全教程及报错处理

BERTopic安装 BERTopic的安装比较复杂,直接安装会报错 安装方法1,.whl文件安装 ERROR: Could not build wheels for hdbscan, which is required to install pyproject.toml-based projects正确安装流程 查看python能安装whl的版本pip debug --verbose Compatible tags: 2…

图表背后的智慧:办公场景中的数据可视化革新

在现代办公场景中&#xff0c;数据可视化的应用已经成为提高效率、推动创新的得力工具。无论是管理层还是普通员工&#xff0c;都能从数据可视化中受益匪浅。下面我就以可视化从业者的角度&#xff0c;简单聊聊这个话题。 首先&#xff0c;数据可视化提升了数据的易读性与理解性…