Java数组02:数组使用、多维数组、冒泡排序和稀疏数组
1.Java入门——介绍及安装2.Java基础01:注释、标识符、数据类型3.Java基础02:类型转换、变量、常量4.Java基础03:基本运算符5.Java基础04:包机制、JavaDoc生成文档6.Java流程控制01:Scanner对象7.Java流程控制02:顺序结构和选择结构8.Java流程控制03:循环结构9.Java方法10.Java数组01:数组的定义、声明、创建、初始化和内存分析
11.Java数组02:数组使用、多维数组、冒泡排序和稀疏数组
12.Java面向对象01:类与对象的关系、创建和初始化对象13.Java面向对象02:封装和继承14.Java面向对象03:抽象类、接口和内部类15.Java异常16.SpringBoot和微服务架构17.SpringBoot基础01:创建项目和编写HTTP接口18.SpringBoot基础02:自动装配原理、yaml语法和JSR-303数据校验19.SpringBoot基础03:静态资源和首页定制20.Java多线程01:什么是线程和线程的创建21.Java多线程02:静态代理模式和Lambda表达式22.Java多线程03:线程的五大状态23.Java多线程04:线程优先级、守护线程和线程同步24.Java多线程05:死锁、LOCK和线程协作25.网络编程基础01:网络编程概述、IP和端口26.网络编程基础02:TCP实现聊天和文件上传27.Java注解和反射01:注解28.Java注解和反射02:反射基本概述和获得Class类的几种方式29.Java注解和反射03:类加载30.Java注解和反射04:Class对象的使用Java数组02:数组使用、多维数组、冒泡排序和稀疏数组
数组使用
-
数组用在普通For循环
package com.lurenj.array; public class ArrayDemo05 { public static void main(String[] args) { int[] arrays = {1,2,4,3}; printArray(arrays); } public static void printArray(int[] arrays){//数组作为形式参数 for (int i = 0; i < arrays.length; i++){ System.out.print(arrays[i]+""); } } }
-
数组用在For-Each 循环
package com.lurenj.array; public class ArrayDemo05 { public static void main(String[] args) { int[] arrays = {1,2,3,4}; //JDK1.5引入的增强型for循环,For-Each循环 for (int array : arrays) { System.out.println(array); } } }
-
数组作为方法入参
-
数组作为返回值
package com.lurenj.array; public class ArrayDemo05 { public static void main(String[] args) { int[] arrays = {1,2,3,4}; int[] reverse = reverse(arrays); printArray(reverse); } public static void printArray(int[] arrays){//数组作为形式参数 for (int i = 0; i < arrays.length; i++){ System.out.print(arrays[i]+""); } } //反转数组,数组作为返回值 public static int[] reverse(int[] arrays){//数组作为形式参数 int[] result = new int[arrays.length]; //反转操作 for (int i = 0,j = result.length - 1; i < arrays.length; i++, j--){ result[j] = arrays[i]; } return result; } }
多维数组
-
多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组。
-
二维数组
int a[][] = new int[2][5];//二维数组a可看成是两行五列的数组。
扩展
Arrays类
- 数组的工具类java.util.Arrays
- 由于数组对象本身并没有什么方法可以提供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作。
- 查看JDK帮助文档
- Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而“不用”使用对象来调用(注意:是“不用”而不是”不能“)
- 具有以下常用功能:
- 给数组赋值:通过fill方法
- 对数组排序:通过sort方法,默认按升序
- 比较数组:通过equals方法比较数组中元素值是否相等
- 查找数组元素:通过binarySearch方法能够对排序好的数组进行二分查找法操作
举例:
package com.lurenj.array;
import java.util.Arrays;
public class ArrayDemo07 {
public static void main(String[] args) {
int[] a = {1,2,3,4,5,6666,77,888888,456,777};
//打印数组元素Arrays.toString()
System.out.println(Arrays.toString(a));
//Arrays.sort()对数组进行排序,默认为升序
Arrays.sort(a);
System.out.println(Arrays.toString(a));
//Arrays.fill()数组填充
Arrays.fill(a,2,4,0);//将数组a中2~4之间的元素填充为0 [2,4)
System.out.println(Arrays.toString(a));//输出为:[1, 2, 0, 0, 5, 77, 456, 777, 6666, 888888]
}
}
冒泡排序
-
排序共有八大排序算法,冒泡是其最出名的排序算法之一
-
冒牌的代码相当简单,两层循环,外层冒泡轮数,里层依次比较
- 比较数组中,两个相邻的元素,如果第一个数比第二个数大,就交换他们的位置
- 每一次比较,都会产生出一个最大或者最小的数字
- 下一轮则可以少一次排序
- 依次循环直至结束
实例:
package com.lurenj.array;
import java.util.Arrays;
public class ArrayDemo08 {
public static void main(String[] args) {
int[] a = {1,23,4,555,6,323,1};
int[] sort = sort(a);
System.out.println(Arrays.toString(sort));
}
public static int[] sort(int[] array){
//临时变量
int temp = 0;
//外层循环,判断需要进行的轮数
for (int i = 0; i < array.length; i++){
boolean flag = false;//通过flag标识位减少没有意义的比较
//内层循环,比较判断两个数,如果第一个数比第二个数大,就交换他们的位置
for (int j = 0; j < array.length -1 -i; j++){
if (array[j] > array[j + 1]){
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
flag = true;
}
}
if (flag == false){
break;
}
}
return array;
}
}
稀疏数组
稀疏数组属于一种数据结构。
- 当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组
- 稀疏数组的处理方法是:
- 记录数组一共有几行几列,有多少个不同值
- 把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模
- 如下图:左边是原始数组,右边是稀疏数组
实例:
package com.lurenj.array;
public class ArrayDemo09 {
public static void main(String[] args) {
//创建一个二维数组 11*11 0:表示没有棋子, 1:黑棋, 2:白棋
int[][] array1 = new int[11][11];
array1[1][2] = 1;
array1[2][3] = 2;
//输出原始数组
System.out.println("输出原始数组:");
/*
for (int i = 0; i < 11; i++) {
for (int i1 = 0; i1 < 11; i1++) {
System.out.print(array1[i][i1] + "\t");
}
System.out.println();
}
*/
for (int[] ints : array1) {
for (int anInt : ints) {
System.out.print(anInt + "\t");
}
System.out.println();
}
System.out.println("=================");
//转换为稀疏数组保存
//1.获取有效值的个数
int sum = 0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (array1[i][j] != 0){
sum++;
}
}
}
System.out.println(sum);
//2.创建一个稀疏数组的数组
int[][] array2 = new int[sum + 1][3];
array2[0][0] = 11;
array2[0][1] = 11;
array2[0][2] = sum;
//遍历二维数组,将非零的值,存放稀疏数组中
int count = 0;
for (int i = 0; i < array1.length; i++){
for (int j = 0; j < array1[i].length; j++){
if (array1[i][j] != 0){
count ++;
array2[count][0] = i;
array2[count][1] = j;
array2[count][2] = array1[i][j];
}
}
}
System.out.println("输出稀疏数组:");
for (int i = 0; i < array2.length; i++){
System.out.println(array2[i][0]+ "\t"
+ array2[i][1]+ "\t"
+ array2[i][2]+ "\t");
}
System.out.println("=================");
System.out.println("还原");
//1.读取稀疏数组
int[][] array3 = new int[array2[0][0]][array2[0][1]];
//2.给其中的元素赋值
for (int i = 1; i < array2.length; i++){
array3[array2[i][0]][array2[i][1]] = array2[i][2];
}
//3.打印
System.out.println("输出还原数组:");
for (int[] ints : array3) {
for (int anInt : ints) {
System.out.print(anInt + "\t");
}
System.out.println();
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通