当前位置: 首页 > news >正文

JAVA第六学:数组的使用

1.数组的基本概念

1.1 定义

数组可以看成是相同类型元素的一个集合,在内存中是一段连续的空间

1.2 创建及初始化


1.3 数组的使用

1.3.1 随机访问

1.3.2 遍历数组(.length)

所谓 "遍历" 是指将数组中的所有元素都访问一遍, 访问是指对数组中的元素进行某种操作,比如:打印

【for-each  写法会让x依次来取数组的每个元素    且 

2.数组是引用类型


2.1 初始JVM的内存分布

2.2 基本类型变量与引用类型变量的区别

基本数据类型创建的变量,称为基本变量,该变量空间中直接存放的是其所对应的值;

引用数据类型创建的变量,一般称为对象的引用,其空间中存储的是对象所在空间的地址。

2.3 再谈引用变量

2.4 认识 null


3.数组的应用场景

3.1 保存数据

3.2 作为函数的参数

参数传基本数据类型:在方法中修改形参的值, 不影响实参的值。

参数传数组类型(引用数据类型)

发现在func方法内部修改数组的内容, 方法外部数组内容也发生改变; 因为数组是引用类型,按照引用类型来进行传递,是可以修改其中存放的内容的。

总结: 所谓的 "引用" 本质上只是存了一个地址;Java 将数组设定成引用类型, 这样的话后续进行数组参数传参, 其实只是将数组的地址传入到函数形参中;这样可以避免对整个数组的拷贝(数组可能比较长, 那么拷贝开销就会很大).

3.3 作为函数的返回值


4.数组练习

4.1 数组转字符串

使用这个方法后续打印数组就更方便一些;Java 中提供了 java.util.Arrays 包,其中包含了一些操作数组的常用方法。

模拟实现 toString

public class F_ShuZu_2025_7_30 {public static void main(String[] args) {int[] arr = {1,2,3,4};System.out.println(toString(arr));}public static String toString(int[] a){String result = "[";for(int i = 0; i < a.length;  i++){result += a[i];//保证最后一个数字后面没有逗号if(i < a.length-1){ result += ", "; }}result += "]";return result;}
}

4.2 数组拷贝

模拟实现 copyOf

public class F_ShuZu_2025_7_30 {public static void main(String[] args) {int[] arr1 = {1, 2, 3, 4, 5};int[] arr2 = copy(arr1,7);System.out.println(Arrays.toString(arr2));}public static int[] copy(int[] arr, int newLength){// 按照参数中指定的长度, 创建新的数组.int[] result = new int[newLength];int len = (newLength < arr.length ? newLength : arr.length);// 遍历原来的数组, 把每个元素都赋值过来.for(int i = 0; i < len; i++){ result[i] = arr[i]; }return result;}
}

4.3 查找数组中指定元素(顺序查找)

模拟实现

public class F_ShuZu_2025_7_30 {public static void main(String[] args) {int[] arr = {1, 2, 3, 4, 5};System.out.println(find(arr,2));}//target-目标public static int find(int[] arr,int target){for(int i = 0; i < arr.length; i++){if(arr[i] == target){ return i; }}return -1;}}

4.5 查找数组中指定元素(二分查找)


public class F_ShuZu_2025_7_30 {public static void main(String[] args) {int[] arr = {1, 2, 3, 4, 5, 6, 7, 8};System.out.println(binarySearch(arr,6));}//binarySeaarch---二分查找    找到了返回对应下标 没有返回-1public static int binarySearch(int[] brr, int x){// 待查找区间最左侧元素与最右侧元素int left = 0;int right = brr.length - 1;// [left, right] 闭区间. 因此 left == right 的时候, 区间还是不空的, 仍然要继续找.while(left <= right){// 此处的 mid 就是中间位置元素的下标. 需要进行取整, 不能得到小数.int mid = (left + right) / 2;// 比较中间位置的元素, 是否和目标元素相同.  并且根据大小关系, 决定下一步查找的区间.// 左侧区间继续找  右侧区间找  找到了, 直接返回if(x < brr[mid]){ right = mid -1; }else if(x > brr[mid]){ left = mid + 1; }else{ return mid; }}// 元素不存在. 经过了上述循环的过程, 也没有找到匹配的元素.return -1;}}

可以看到, 针对一个长度为 10000 个元素的数组查找, 二分查找只需要循环 14 次就能完成查找. 随着数组元素个数 越多, 二分的优势就越大.

4.6 数组排序(冒泡排序)

public class F_ShuZu_2025_7_30 {public static void main(String[] args) {int[] brr = {7, 2, 9, 4, 0, 6, 3, 8};bubbleSort(brr);System.out.println(Arrays.toString(brr));}//bubbleSort--冒泡排序    升序排序public static void bubbleSort(int[] arr){for (int i = 0; i < arr.length - 1; i++) {// 进行每一趟具体的冒泡过程了. 总的比较次数, 需要注意好.// 在当前待比较区间的元素个数基础上, - 1 个.for (int j = 0; j < arr.length - i - 1; j++) {if (arr[j] > arr[j + 1]) {// 交换两个元素int tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;}}}}}

4.7 数组逆序

public class F_ShuZu_2025_7_30 {public static void main(String[] args) {int[] brr = {1, 2, 3, 4, 5, 6, 7, 8};reverse(brr);System.out.println(Arrays.toString(brr));}public static void reverse(int[] arr) {int left = 0;int right = arr.length - 1;// 此处不需要写作 <= . 当 left == right 的时候, 就剩下一个元素了.// 一个元素不需要进行任何交换.while (left < right) {// 交换操作int tmp = arr[left];arr[left] = arr[right];arr[right] = tmp;// 更新循环变量left++;right--;}}
}

5.二维数组

http://www.lryc.cn/news/613459.html

相关文章:

  • 【数据结构】二叉树练习
  • S7-1200 串行通信介绍
  • 一场 Dark Theme A/B 测试的复盘与提效实践
  • Linux上MySql CPU 占用异常
  • SpringBoot中的单例注入方式
  • windows有一个企业微信安装包,脚本执行并安装到d盘。
  • VSCode ssh一直在Setting up SSH Host xxx: Copying VS Code Server to host with scp等待
  • 开发避坑指南(20) :MyBatis操作Oracle插入NULL值异常“无效列类型1111“解决方案
  • DrissionPage实战案例:小红书旅游数据爬取
  • TDengine IDMP 文档介绍
  • 腾讯位置服务 —— 预估订单路线金额(使用Drools规则引擎处理)
  • 机器学习在量化中的应用:如何从逻辑回归到XGBoost实现高效预测?
  • [Oracle] DECODE()函数
  • DBeaver 25.1.0 转储数据库失败解决方案(适配最新版界面)
  • [Oracle] GREATEST()函数
  • 数据库入门:从零开始构建你的第一个数据库
  • 一个基于固定 IP地址查询天气的 C 语言程序,通过调用第三方天气 API:
  • Oracle 关闭 impdp任务
  • Oracle 12c + Pl/Sql windows系统下表空间创建、迁移,dmp备份导入,数据库字符集更改
  • 图论(1):图数据结构
  • 攻防世界WEB(新手模式)2-2-upload1
  • 【YOLO学习笔记】YOLOv8详解解读
  • 工业相机使用 YOLOv8深度学习模型 及 OpenCV 实现目标检测简单介绍
  • Moses工具的配置和小语种平行语料训练SMT完整实现
  • 商城小程序怎么做?如何开发母婴用品商城小程序?
  • 前端三大核心要素以及前后端通讯
  • mysql_mcp_server_pro源码部署及启动报错新手指南:让智能体长出手来直接获取到最底层的数据
  • Linux ISCSI服务配置
  • 聚集索引VS非聚集索引:核心差异详解
  • 将Excel数据导入SQL Server数据库,并更新源表数据