一级a做爰片迅雷网站/今日头条热点新闻
6 数组的定义与使用
- 6.1 什么是数组
- 6.2 数组的创建及初始化
- 6.2.1 数组的创建:
- 6.2.2 数组的初始化
- 6.3 数组的使用
- 6.3.1 数组中元素的访问
- 6.3.2 Java中JVM当中的内存划分
- 6.3.3 遍历数组
- 6.4 数组是引用类型
- 6.4.1 初始JVM的内存分布
- 6.4.2 基本类型变量与引用类型变量的区别
- 6.4.3 引用变量
- 6.4.4 认识null
- 6.5 作为函数的参数
- 6.5.1 参数传参基本数据类型
- 6.5.2 参数传数组类型(引用数据类型)
- 6.6 作为函数的返回值
- 6.7 数组练习
- 6.7.1 数组转字符串
- 6.7.2 数组拷贝
- 6.7.3 求数组中元素的平均值
- 6.8 查找数组中指定元素(顺序查找)
- 6.9 查找数组中指定元素(二分查找)
- 6.10 数组排序之冒泡排序
- 6.11 数组的逆序
- 6.12 二维数组
- 定义和遍历
6.1 什么是数组
数组:可以看成是相同类型元素的一个集合。在内存中是一段连续的空间。
- 数组中存放的元素其类型相同
- 数组的空间是连在一起的
- 每个空间有自己的编号,其实位置的编号为0,即数组的下标。
6.2 数组的创建及初始化
6.2.1 数组的创建:
**T [ ] 数组名 = new T[N]; **
T:表示数组中存放元素的类型
T [ ] :表示数组的类型
N:表示数组的长度
int[] array1 = new int[10]; // 创建一个可以容纳10个int类型元素的数组
double[] array2 = new double[5]; // 创建一个可以容纳5个double类型元素的数组
String[] array3 = new double[3]; // 创建一个可以容纳3个字符串元素的数组
6.2.2 数组的初始化
数组的初始化主要分为动态初始化以及静态初始化。
- 动态初始化:在创建数组时,直接指定数组中元素的个数
int[] array = new int[10];//里面元素默认为0;
- 静态初始化:在创建数组时不直接指定数据元素个数,而直接将具体的数据内容进行指定
语法格式: T [ ] 数组名称 = {data1, data2, data3, …, datan};
int[] array1 = new int[]{0,1,2,3,4,5,6,7,8,9};
double[] array2 = new double[]{1.0, 2.0, 3.0, 4.0, 5.0};
String[] array3 = new String[]{"hell", "Java", "!!!"};
注意:
- 静态初始化虽然没有指定数组的长度,编译器在编译时会根据{}中元素个数来确定数组的长度。
- 静态初始化时, {}中数据类型必须与[]前数据类型一致。
- 静态初始化可以简写,省去后面的new T[ ]。
// 注意:虽然省去了new T[], 但是编译器编译代码时还是会还原
int[] array1 = {0,1,2,3,4,5,6,7,8,9};
double[] array2 = {1.0, 2.0, 3.0, 4.0, 5.0};
String[] array3 = {"hell", "Java", "!!!"};
静态和动态初始化也可以分为两步,但是省略格式不可以。
int[] array1;
array1 = new int[10];
int[] array2;
array2 = new int[]{10, 20, 30};
// 注意省略格式不可以拆分, 否则编译失败
// int[] array3;
// array3 = {1, 2, 3};
如果没有对数组进行初始化,数组中元素有其默认值
如果数组中存储元素类型为基类类型,默认值为基类类型对应的默认值,比如:
如果数组中存储元素类型为引用类型,默认值为null
//默认是falseboolean[] array = new boolean[10];System.out.println(array[1]);//存储元素是String 引用类型,默认值为nullString[] array3 = new String[10];System.out.println("faa");
6.3 数组的使用
6.3.1 数组中元素的访问
** 数组在内存中是一段连续的空间,空间的编号都是从0开始的,依次递增,该编号称为数组的下标,数组可以通过下标访问其任意位置的元素**
public static void main(String[] args) {int[] array = {1,2,3,4,5};System.out.println(array[0]);array[0] = 100;System.out.println(array[0]);// System.out.println(array[5]); // 越界System.out.println(array.length);//数组的长度System.out.println(array);int[] array2 = null;System.out.println(array2); // 局部变量使用的时候 一定要进行初始化}
注意:
- 数组是一段连续的内存空间,因此支持随机访问,即通过下标访问快速访问数组中任意位置的元素
- 下标从0开始,介于[0, N)之间不包含N,N为元素个数,不能越界,否则会报出下标越界异常。
6.3.2 Java中JVM当中的内存划分
6.3.3 遍历数组
** “遍历” 是指将数组中的所有元素都访问一遍, 访问是指对数组中的元素进行某种操作**
int[] array = {1,2,3,4};for (int i = 0; i < array.length; i++) {System.out.print(array[i] + " ");}System.out.println();// for-each 如果只是用来遍历程序 如果需要下标 用for循环for (int x : array) {System.out.print(x + " ");}System.out.println();
for-each 是 for 循环的另外一种使用方式. 能够更方便的完成对数组的遍历. 可以避免循环条件和更新语句写错.
//将数组转化为字符串输出String ret = Arrays.toString(array);System.out.println(ret);
6.4 数组是引用类型
6.4.1 初始JVM的内存分布
内存是一段连续的存储空间,主要用来存储程序运行时数据的。比如:
- 程序运行时代码需要加载到内存
- 程序运行产生的中间数据要存放在内存
- 程序中的常量也要保存
- 有些数据可能需要长时间存储,而有些数据当方法运行结束后就要被销毁
蓝色区域==:由所有线程共享的数据区==
粉色区域==:线程隔离的数据区==
- 程序计数器 (PC Register): 只是一个很小的空间, 保存下一条执行的指令的地址
- 虚拟机栈(JVM Stack): 与方法调用相关的一些信息,每个方法在执行时,都会先创建一个栈帧,栈帧中包含有:局部变量表、操作数栈、动态链接、返回地址以及其他的一些信息,保存的都是与方法执行时相关的一些信息。比如:局部变量。当方法运行结束后,栈帧就被销毁了,即栈帧中保存的数据也被销毁了。
- 本地方法栈(Native Method Stack): 本地方法栈与虚拟机栈的作用类似. 只不过保存的内容是Native方法的局部变量. 在有些版本的JVM 实现中(例如HotSpot), 本地方法栈和虚拟机栈是一起的
堆(Heap): JVM所管理的最大内存区域. 使用** new 创建的对象都是在堆上保存** (例如前面的 new int[]{1, 2,3} ),堆是随着程序开始运行时而创建,随着程序的退出而销毁,堆中的数据只要还有在使用,就不会被销毁。
方法区(Method Area): 用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据. 方法编译出的的字节码就是保存在这个区域。
6.4.2 基本类型变量与引用类型变量的区别
基本数据类型创建的变量,称为基本变量,该变量空间中直接存放的是其所对应的值;
而引用数据类型创建的变量,一般称为对象的引用,其空间中存储的是对象所在空间的地址。
int[] array = {1,2,3,4};//局部变量 引用变量int a = 10; //局部变量 基本类型的变量
6.4.3 引用变量
public static void main(String[] args) {int[] array1 = new int[3];array1[0] = 10;array1[1] = 20;array1[2] = 30;int[] array2 = new int[]{1,2,3,4,5};array2[0] = 100;array2[1] = 200;array1 = array2;array1[2] = 300;array1[3] = 400;array1[4] = 500;}
6.4.4 认识null
null 在 Java 中表示 “空引用” , 也就是一个不指向对象的引用.
int[] arr = null;//System.out.println(arr[0]); //报错
null 的作用类似于 C 语言中的 NULL (空指针), 都是表示一个无效的内存位置. 因此不能对这个内存进行任何读写操作. 一旦尝试读写, 就会抛出 NullPointerException.
注意:Java 中并没有约定 null 和 0 号地址的内存有任何关联.
6.5 作为函数的参数
6.5.1 参数传参基本数据类型
public static void print(int[] array) {for (int i = 0; i < array.length; i++) {System.out.print(array[i] + " ");}}public static void main(String[] args) {int[] array = {1,2,3,4};print(array);}
6.5.2 参数传数组类型(引用数据类型)
public static void main(String[] args) {int[] array = {1,2,3,4};func1(array);System.out.println(Arrays.toString(array));func2(array);System.out.println(Arrays.toString(array));}public static void func1(int[] array) {array = new int[]{11,22,33,44,55};}public static void func2(int[] array) {array[0] = 99;}
调用func1时:
调用func2:
注意:其实Java只有一种传参数的方法–就是传值
- 引用变量当中存的是“地址”
- 引用指向对象
6.6 作为函数的返回值
public static void main(String[] args) {int[] ret = func5();System.out.println(Arrays.toString(ret));}public static int[] func5() {int[] array = {1,2,3,4};return array;}
6.7 数组练习
6.7.1 数组转字符串
public static void main(String[] args) {int[] array = {1,2,3,4};String ret = myToString(array);System.out.println(ret);}public static String myToString(int[] array) {if (array == null) {return null;}String ret = " ";System.out.print("[");for (int i = 0; i < array.length; i++) {ret += array[i];if (i != array.length - 1) {ret += ",";}}ret += "]";return ret;}
6.7.2 数组拷贝
使用copyOf()
public static void main(String[] args) {int[] array = {1,2,3,4};//拷贝array数组 长度为array.lengthint[] copy = Arrays.copyOf(array,array.length);System.out.println(Arrays.toString(copy));}
** 数组扩容**
//数组扩容int[] array = {1,2,3,4};array = Arrays.copyOf(array,array.length*2);// array 指向了 新的数组空间System.out.println(array);}
打印部分内容 Array.copyOfRange(原数组,from,to) [from,to)
//打印部分内容public static void main(String[] args) {int[] array = {1,2,3,4,5};int[] copy = Arrays.copyOfRange(array,1,3); // [1,3)System.out.println(Arrays.toString(copy));}
** System.arraycopy()**
public static void main(String[] args) {// 用 System.arraycopy()int[] array = {1,2,3,4,5};int[] dest = new int[array.length];System.arraycopy(array,0,dest,0,array.length);System.out.println(Arrays.toString(dest));}
** array.clone()**
也可以实现拷贝
public static void main(String[] args) {int[] array = {1,2,3,4,5};int[] copy = array.clone();System.out.println(Arrays.toString(copy));}
6.7.3 求数组中元素的平均值
public static void main(String[] args) {int[] array = {1,2,3,4,5,6};System.out.println(avg(array));}public static double avg(int[] arr) {int sum = 0;for (int x:arr) {sum += x;}return (double)sum / (double)arr.length;}
6.8 查找数组中指定元素(顺序查找)
给定一个数组, 再给定一个元素, 找出该元素在数组中的位置.
public static void main(String[] args) {int[] array = {1,2,3,44,5};System.out.println(find(array,2));}public static int find(int[] arr,int key) {for (int i = 0; i < arr.length; i++) {if (arr[i] == key) {return i;}}return -1;}
6.9 查找数组中指定元素(二分查找)
** 使用二分查找的前提是有序数组**
以升序数组为例, 二分查找的思路是先取中间位置的元素, 然后使用待查找元素与数组中间元素进行比较:
如果相等,即找到了返回该元素在数组中的下标
如果小于,以类似方式到数组左半侧查找
如果大于,以类似方式到数组右半侧查找
public static void main(String[] args) {int[] array = {1,2,31,14,5};Arrays.sort(array);System.out.println(Arrays.toString(array));System.out.println(binarySearch(array,14));}public static int binarySearch(int[] array,int key) {int i = 0;int j = array.length - 1;while (i <= j) {int mid = (i+j) / 2;if (array[mid] < key) {i = mid + 1;} else if ( array[mid] == key) {return i;} else {j = mid - 1;}}return -1;}
//结果 为 3
可以看到, 针对一个长度为 10000 个元素的数组查找, 二分查找只需要循环 14 次就能完成查找. 随着数组元素个数越多, 二分的优势就越大.
6.10 数组排序之冒泡排序
算法思路:
1. 将数组中相邻元素从前往后依次进行比较,如果前一个元素比后一个元素大,则交换,一趟下来后最大元素就在数组的末尾
2. 依次从上上述过程,直到数组中所有的元素都排列好
public static void main(String[] args) {int[] array = {1,12,31,4,5};bubbleSort(array);System.out.println(Arrays.toString(array));}public static void bubbleSort(int[] array) {//5个数据 比较4趟 i 代表的是趟数for (int i = 0; i < array.length-1; i++) {boolean flag = false;for (int j = 0; j < array.length-1-i; j++) {if (array[j] > array[j+1]) {int tmp = array[j];array[j] = array[j+1];array[j+1] = tmp;flag = true;}}if (flag == false) {return; //说明已经有序了}}}
6.11 数组的逆序
public static void main(String[] args) {int[] array = {1,2,31,14,5};reverse(array);System.out.println(Arrays.toString(array));}public static void reverse(int[] array) {int i =0;int j = array.length - 1;while (i < j) {int tmp;tmp = array[i];array[i] = array[j];array[j] = tmp;i++;j--;}}
6.12 二维数组
定义和遍历
二维数组的本质上也就是一维数组,只不过每个元素又是一个一维数组
public static void main(String[] args) {int[][] array = {{1,2,3},{4,5,6}};System.out.println(array.length); //行System.out.println(array[0].length); //列System.out.println(array[1].length);for (int i = 0; i < array.length; i++) {for (int j = 0; j < array[i].length; j++) {System.out.print(array[i][j] + " ");}System.out.println();}System.out.println();//用for-each遍历二维数组for (int[] tmpArray : array) {for (int x : tmpArray) {System.out.print(x + " ");}System.out.println();}System.out.println();//打印二维数组String ret = Arrays.deepToString(array);System.out.println(ret);}
public static void main(String[] args) {//java当中 二维数组 在定义的时候 可以省略掉列int[][] array = new int[2][]; //不规则数组//对 每一维数组 进行了初始化array[0] = new int[3];array[1] = new int[5];for (int i = 0; i < array.length; i++) {for (int j = 0; j < array[i].length; j++) {System.out.print(array[i][j] + " ");}System.out.println();}}
相关文章:

【0基础学Java第六课】-- 数组的定义与使用
6 数组的定义与使用 6.1 什么是数组6.2 数组的创建及初始化6.2.1 数组的创建:6.2.2 数组的初始化 6.3 数组的使用6.3.1 数组中元素的访问6.3.2 Java中JVM当中的内存划分6.3.3 遍历数组 6.4 数组是引用类型6.4.1 初始JVM的内存分布6.4.2 基本类型变量与引用类型变量的…...

后台项目Gradle打包jar,不包含依赖jar并放到外部路径
# 1.Gradle打包jar # 2.依赖jar包外放到其他目录 # 3.保留引用关系 # 4.去掉引入的缓存build.gradle// 需要放到dependencies下面 // 傻逼问题 1 这个jar打包还得主动开 jar.enabled true // 1.清除上一次的lib目录 task clearJar(type: Delete) {delete "$buildDir\\lib…...

NSSCTF web刷题记录4
文章目录 [NSSRound#4 SWPU]1zweb(revenge)[强网杯 2019]高明的黑客[BJDCTF 2020]Cookie is so subtle![MoeCTF 2021]fake game[第五空间 2021]PNG图片转换器[ASIS 2019]Unicorn shop[justCTF 2020]gofs[UUCTF 2022 新生赛]phonecode[b01lers 2020]Life On Mars[HZNUCTF 2023 f…...

什么是大模型?一文读懂大模型的基本概念
大模型是指具有大规模参数和复杂计算结构的机器学习模型。本文从大模型的基本概念出发,对大模型领域容易混淆的相关概念进行区分,并就大模型的发展历程、特点和分类、泛化与微调进行了详细解读,供大家在了解大模型基本知识的过程中起到一定参…...

数据结构之队的实现
𝙉𝙞𝙘𝙚!!👏🏻‧✧̣̥̇‧✦👏🏻‧✧̣̥̇‧✦ 👏🏻‧✧̣̥̇:Solitary-walk ⸝⋆ ━━━┓ - 个性标签 - :来于“云”的“羽球人”。…...

【实战Flask API项目指南】之三 路由和视图函数
实战Flask API项目指南之 路由和视图函数 本系列文章将带你深入探索实战Flask API项目指南,通过跟随小菜的学习之旅,你将逐步掌握 Flask 在实际项目中的应用。让我们一起踏上这个精彩的学习之旅吧! 前言 当小菜踏入Flask后端开发的世界时&…...

mediasoup udp端口分配策略
mediasoup-worker多进程启动时,rtcMinPort/rtcMaxPort可以使用相同的配置。 for (let i 0; i < numWorkers; i) { let worker await mediasoup.createWorker({ logLevel: config.mediasoup.worker.logLevel, logTags: config.mediasoup.work…...

山西电力市场日前价格预测【2023-11-07】
日前价格预测 预测说明: 如上图所示,预测明日(2023-11-07)山西电力市场全天平均日前电价为318.54元/MWh。其中,最高日前电价为514.01元/MWh,预计出现在18: 00。最低日前电价为192.95元/MWh,预计…...

Microsoft Dynamics 365 CE 扩展定制 - 5. 外部集成
本章内容包括: 使用.NET从其他系统连接到Dynamics 365使用OData(Java)从其他系统连接到Dynamics 365使用外部库从外部源检索数据使用web应用程序连接到Dynamics 365运行Azure计划任务设置Azure Service Bus终结点与Azure Service Bus构建近乎实时的集成使用来自Azure服务总线…...

手机升级STM32单片机,pad下载程序,手机固件升级单片机,局域网程序下载,STM32单片机远程下载升级
STM32单片机,是我们最常见的一种MCU。通常我们在使用STM32单片机都会遇到程序在线升级下载的问题。 STM32单片机的在线下载通常需要以下几种方式完成: 1、使用ST提供的串口下载工具,本地完成固件的升级下载。 2、自行完成系统BootLoader的编写…...

【漏洞复现】weblogic-SSRF漏洞
感谢互联网提供分享知识与智慧,在法治的社会里,请遵守有关法律法规 文章目录 漏洞测试注入HTTP头,利用Redis反弹shell 问题解决 Path : vulhub/weblogic/ssrf 编译及启动测试环境 docker compose up -dWeblogic中存在一个SSRF漏洞࿰…...

FreeSWTCH dialplan check nosdp
应朋友要求写一段dialplan,如果没有sdp(sip_profile打开了3pcc),马上回486,当然如果有sdp,dialplan正常往下走 我试了试,貌似不太复杂,如下: <!-- check no sdp --&…...

微信小程序案例3-1 比较数字
文章目录 一、运行效果二、知识储备(一)Page()函数(二)数据绑定(三)事件绑定(四)事件对象(五)this关键字(六)setData()方法࿰…...

哈希表----数据结构
引入 如果你是一个队伍的队长,现在有 24 个队员,需要将他们分成 6 组,你会怎么分?其实有一种方法是让所有人排成一排,然后从队头开始报数,报的数字就是编号。当所有人都报完数后,这 24 人也被分…...

可达矩阵-邻接矩阵-以及有向图的python绘制
参考1 自定义输入矩阵来绘制 根据参考代码, 自定义 代码如下: # 编程实现有向图连通性的判断 from pylab import mplmpl.rcParams[font.sans-serif] [SimHei] mpl.rcParams[axes.unicode_minus] False import numpy as np import networkx as nx imp…...

react typescript @别名的使用
1、config/webpack.config.js中找到alias,添加: path.resolve(src) ,如下: alias: {// Support React Native Web// https://www.smashingmagazine.com/2016/08/a-glimpse-into-the-future-with-react-native-for-web/"react-native&qu…...

C++性能优化笔记-6-C++元素的效率差异-7-类型转换
C元素的效率差异 类型转换signed与unsigned转换整数大小转换浮点精度转换整数到浮点转换浮点到整数转换指针类型转换重新解释对象的类型const_caststatic_castreinterpret_castdynamic_cast转换类对象 类型转换 在C语法中,有几种方式进行类型转换: // …...

c#中switch常用模式
声明模式 首先检查value的类型,然后根据类型输出相应的消息 public void ShowMessage(object value) {switch (value){case int i: Console.WriteLine($"value is int:{i}"); break;case long l: Console.WriteLine($"value is long:{l}"); b…...

Flink SQL 常用作业sql
目录 flink sql常用配置kafka source to mysql sink窗口函数 开窗datagen 自动生成数据表tumble 滚动窗口hop 滑动窗口cumulate 累积窗口 grouping sets 多维分析over 函数TopN flink sql常用配置 设置输出结果格式 SET sql-client.execution.result-modetableau;kafka source…...

nodejs国内镜像及切换版本工具nvm
淘宝 NPM 镜像站(http://npm.taobao.org)已更换域名,新域名: Web 站点:https://npmmirror.com Registry Endpoint:https://registry.npmmirror.com 详见: 【望周知】淘宝 NPM 镜像换域名了&…...

用Rust和Scraper库编写图像爬虫的建议
本文提供一些有关如何使用Rust和Scraper库编写图像爬虫的一般建议: 1、首先,你需要安装Rust和Scraper库。你可以通过Rustup或Cargo来安装Rust,然后使用Cargo来安装Scraper库。 2、然后,你可以使用Scraper库的Crawler类来创建一个…...

Java 语言环境搭建
JDK 是一种用于构建在 Java 平台上发布的应用程序、Applet 和组件的开发环境,即编写 Java 程序必须使用 JDK,它提供了编译和运行 Java 程序的环境。 在安装 JDK 之前,首先要到 Oracle 网站获取 JDK 安装包。JDK 安装包被集成在 Java SE 中&a…...

酷开科技 | 酷开系统里萌萌哒小维在等你!
在一片金黄淡绿的颜色中,深秋的脚步更近了,在这个气候微凉的季节里,你是不是更想拥有一种温暖的陪伴呢?酷开科技智慧AI语音功能更懂你,贴心的小维用心陪伴你的每一天。 01.全天候陪伴 在酷开系统中,只要你…...

Bash 4关联数组:错误“声明:-A:无效选项”
Bash 4 associative arrays: error “declare: -A: invalid option” 就是bash版本太低 1.先确定现在的版本 bash -version 我的就是版本太低 升级新版本bash4.2 即可 升级步骤 1.下载bash-4.2wget http://ftp.gnu.org/gnu/bash/bash-4.2.tar.gz 2. 下载完成解压 tar -zxvf…...

干货|AI辅助完成论文的正确打开方式!
论文写作中可能遇到问题 1. 选题问题:是否无法确定研究方向和选择合适的题目? 2. 文献综述问题:是否困惑如何进行文献调研和综述? 3. 方法论问题:是否不知道该选择何种研究方法? 4. 数据处理问题&#…...

SpringBoot--Web开发篇:含enjoy模板引擎整合,SpringBoot整合springMVC;及上传文件至七牛云;restFul
SpringBoot的Web开发 官网学习: 进入spring官网 --> projects --> SpringBoot --> LEARN --> Reference Doc. --> Web --> 就能看到上述页面 静态资源映射规则 官方文档 总结: 只要是静态资源,放在类路径下࿱…...

线上JAVA应用平稳运行一段时间后出现JVM崩溃问题 | 京东云技术团队
一、问题是怎么发现的 系统是一个定时任务系统,需要定时执行业务代码,业务代码主要是访问MYSQL数据库和缓存进行操作,该开始启动,系统日志一切正常,但是运行一段时间到凌晨后,系统就自动崩溃了,…...

进口跨境商城源码:高效、安全、可扩展的电商平台解决方案
电子商务的兴起为跨境贸易提供了前所未有的机会和挑战。在这个全球化的时代,跨境电商平台成为许多企业进军国际市场的首选。然而,搭建一个高效、安全、可扩展的进口跨境商城并非易事。 1. 解决方案概述 我们推出的 "进口跨境商城源码" 提供了一…...

GEE数据集——2019、2020、2021、2022和2023年全球固定宽带和移动(蜂窝)网络性能Shapefile 格式数据集
全球固定宽带和移动(蜂窝)网络性能 全球固定宽带和移动(蜂窝)网络性能,分配给缩放级别 16 网络墨卡托图块(赤道处约 610.8 米 x 610.8 米)。数据以 Shapefile 格式和 Apache Parquet 格式提供&…...

什么是防火墙?详解三种常见的防火墙及各自的优缺点
目录 防火墙的定义 防火墙的功能 防火墙的特性 防火墙的必要性 防火墙的优点 防火墙的局限性 防火墙的分类 分组过滤防火墙 优点: 缺点: 应用代理防火墙 优点 缺点 状态检测防火墙 优点 缺点 防火墙的定义 防火墙的本义原是指古代人们…...