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

Java中关于数组的使用(下)

1.冒泡排序

2.Arrays.sort 使用

3.二分查找

4.数组的拷贝 --- Arrays.copyOf

5.数组逆序输出

6.二维数组


1.冒泡排序

让一个乱序的数组排序为升序  ---- 如果前一个数比后一个数大,那么就交换,所以最大的数一定是在最右边,下面是我实现冒泡排序的代码:

public static void bubbleSort(int[] array) {for(int i = 0; i < array.length - 1; ++i) {boolean flag = true;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 = false;}}if(flag) {break;//如果没有进行交换,说明整个数组已经是有序的,那么直接退出}}}public static void main(String[], args) {int[] array = new int[]{2,3,5,4,1,6,10,9,8,7};bubbleSort(array);String ret = Arrays.toString(array);System.out.print("array = ");System.out.println(ret);}

2.Arrays.sort的使用

在Java当中为我们提供了关于数组排序的算法方法,因为冒泡排序的效率低,而且在开发过程中我们要提高我们的开发效率,所以我们可以直接使用Arrays.sort提高我们的效率

public static void main(String[] args) {int[] array = new int[]{2,4,1,3,5,8,6,5,10,9};Arrays.sort(array);//使用sort进行排序String ret = Arrays.toString(array);System.out.println(ret);
}

3.二分查找

二分查找,我们需要每次取到中间元素,然后和我们要查找的目标target进行比较,然后移动我们的left或者right,然后不断的取中间元素,进行比较,最终的元素就可以被我们查找到,因为我们每次都砍一半进行查找,所以对于普通的全局遍历查找的效率会快很多

public static int binarySearch(int[] array, int target) {int left = 0;int right = array.length - 1;while(left <= right) {int mid = (left + right) / 2;  //拿到中间元素的下标//进行比较if(array[mid] < target) {left = mid + 1;} else if(array[mid] == target) {return mid;} else {right = mid - 1;}}return -1;}public static void main(String[] args) {int[] array = new int[]{1,2,3,4,5,6,7,8,9,10};int ret = binarySearch(array, 8);System.out.println(ret);}

4.数组的拷贝 --- Arrays.copyOf

下面我会进行手动拷贝和使用Java为我们提供的方法Arrays.copyOf俩种方法,在效率和开发上,当然是Java为我们提供的方法更好用,下面就可以看到他的优点

手动拷贝:

public static void main18(String[] args) {int[] array1 = new int[]{1,2,3,4,5,6,7,8,9,10};int [] array2 = new int[array1.length];for(int i = 0; i < array1.length; i++) {array2[i] = array1[i]; // 拷贝}String ret1 = Arrays.toString(array1);String ret2 = Arrays.toString(array2);System.out.print("array1 = ");System.out.println(ret1);System.out.print("array2 = ");System.out.println(ret2);}

Arrays.copyOf

public static void main(String[] args) {int[] array1 = new int[]{1,2,3,4,5,6,7,8,9,10};int[] array2 = Arrays.copyOf(array1, array1.length);//这里传参要传拷贝的目标和拷贝目标的长度String ret1 = Arrays.toString(array1);String ret2 = Arrays.toString(array2);System.out.print("array1 = ");System.out.println(ret1);System.out.print("array2 = ");System.out.println(ret2);
}

Arrays.copyOf也可以指定拷贝的区间,不过要注意区间是[ )

在指定区间拷贝的话,要使用Arrays.copyOfRange

public static void main(String[] args) {int[] array1 = new int[]{1,2,3,4,5,6,7,8,9,10};int[] array2 = Arrays.copyOfRange(array1,3,7); // 这里的区间为[3,7)String ret = Arrays.toString(array2);System.out.print("array2 = ");System.out.println(ret);}

5.数组逆序输出

数组逆序,我们可以想到把头和尾俩个元素交换即可,用一个while循环就可以搞定

public static void main(String[] args) {int[] array = new int[]{1,2,3,4,5,6,7,8,9,10};int left = 0;int right = array.length - 1;while(left < right) {//交换过程int tmp = array[left];array[left] = array[right];array[right] = tmp;left++;right--;}String ret = Arrays.toString(array);System.out.print("array = ");System.out.println(ret);}

6.二维数组

在Java中二维数组其实和C语言区别不大,可以说没什么区别,就是一个二维的一维数组拼接起来,本质上也是一维数组,但是相较于C语言,Java中的二维数组可以省略列,但是不可以省略行,而C语言恰恰相反,C语言的二维数组不可以省略列,可以省略行,下面是在Java中对于二维数组的写法:

public static void main(String[] args) {//第一种方法int[][] array1 = new int[][]{{1,2,3,4,5},{6,7,8,9,10}};//第二种方法int[][] array2 = {{1,2,3,4,5},{6,7,8,9,10}};//第三种方法int[][] array3 = new int[2][];//行不可以省略,但是列可以省略//打印System.out.println("array1 :");for(int i = 0; i < array1.length; i++) {for(int j = 0; j < array1[i].length; j++) {System.out.print(array1[i][j] + " ");}System.out.println();}System.out.println("array2 :");for(int i = 0; i < array1.length; i++) {for(int j = 0; j < array1[i].length; j++) {System.out.print(array1[i][j] + " ");}System.out.println();}System.out.println("array3 :");for(int i = 0; i < array1.length; i++) {for(int j = 0; j < array1[i].length; j++) {System.out.print(array1[i][j] + " ");}System.out.println();}}

不规则二维数组

在我们第三种创建数组的方法中,第三种创建的数组是一种不规则的二维数组,应为我们在初始化的时候并没有确定具体的行数列数,所以它是一种不规则的,对于没有初始化的数组,默认初始化为0

    public static void main(String[] args) {int[][] array = new int[3][];//确定了行数为3,但是没有确定列array[0] = new int[3];//意思是第1行有3列array[1] = new int[5];//意思是第2行有5列array[2] = new int[2];//意思是第3行有2列//在打印一位数组的时候我们可以使用Arrays.toString//而我们在打印二维数组的时候需要使用deepToStringString ret = Arrays.deepToString(array);System.out.println(ret);}

相关文章:

  • springboot中过滤器配置使用
  • 《爱的艺术》
  • python打卡训练营打卡记录day36
  • 电梯调度算法详解与Python实现
  • 简单数学板子和例题
  • 【短距离通信】【WiFi】WiFi7关键技术之4096-QAM、MRU
  • LLMs之Qwen:《Qwen3 Technical Report》翻译与解读
  • 用python实现中国象棋
  • PDF 编辑批量拆分合并OCR 识别
  • TCP 协议的相关特性
  • 识别速度快且精准的OCR工具
  • java每日精进 5.25【Redis缓存】
  • 【ExcelVBA 】类模块学习从入门到放弃
  • SHAP分析+贝叶斯优化BP神经网络+新数据预测+K折交叉验证+相关性分析+孤立森林异常值处理,Matlab代码实现,作者:机器学习之心!
  • 【MPC控制】番外篇:MPC 与 机器学习/深度学习 —— 双雄会的相似与不同
  • ADS学习笔记(三) 瞬态仿真
  • C++学习之STL学习:string类常用接口的模拟实现
  • 李宏毅《机器学习2025》笔记 第二讲 —— AI Agent
  • vue3中computed计算属性和watch监听的异同点
  • 历年吉林大学保研上机真题
  • 室内设计网站模板/广东百度推广的代理商
  • 影视公司需要的许可证/上海专业优化排名工具
  • 嘉兴专业网站建设/网站推广计划方案
  • 在网站添加邮箱/海底捞口碑营销案例
  • 自己切片做网站/链接平台
  • 响应式购物网站模板/正规营销培训