java学习(5)-二维数组以及排序算法
来源:互联网 发布:数据覆盖了能恢复吗 编辑:程序博客网 时间:2024/06/04 18:07
java学习(5)
声明:由于学习是使用JDK7,所有关于java学习所提供的代码段在JDK7环境下均经过测试,没有问题,如何环境不同,可能会有报错!!!
之前已经说过关于一维数组的问题了,这篇从二维数组以及两种排序算法来写。
【最近在对于写过的代码进行整理总结,后续还会对于一些代码段进行梳理】
1. 二维数组:其实二维数组其实就是一个元素为一维数组的数组。
类似于一维数组,二维数组也有动态和静态两种初始化方法
1.1 动态初始化方式一(指定有多少个长度相同的一维数组):
数据类型[][] 变量名 = new 数据类型[m][n];
代码示例:
//请定义一个二维数组,二维数组有4个一维数组,每个一维数组有3个元素
int [][] arr = new int[4][3];
1.2 动态初始化方式二(指定二维数组中有多少个一维数组,每一个一维数组的长度不固定):
数据类型[][] 变量名 = new 数据类型[m][];
代码示例:
int[][] arr = new int[3][];
arr[0]= new int[2];
arr[1]= new int[3];
arr[2]= new int[1];
这里刚开始就定义了一个二维数组,动态初始化的指定为3个一维数组,但是并没有指定每个一维数组的长度,也就是说一维数组的长度不固定。
注意:m这个数据必须给出,就是必须指定一维数组的个数,以便开辟内存空间,后面的数据可以不给
1.3 二维数组的静态初始化:
静态初始化:
数据类型[][] 变量名 = new 数据类型[][]{{元素…},{元素…},{元素…}};
简化格式:
数据类型[][] 变量名 = {{元素…},{元素…},{元素…}};
代码示例:
//定义一个里面有4个长度一样的一维数组的二维数组
int [][] arr1 = {{2,1,3},{4,32,2},{4,2,1},{1,4,5,7}};
//定义一个里面有4个长度不一样的一维数组的二维数组
int [][] arr2 = {{2,1},{4,32,2},{4,2,1,32},{4,5}};
这里使用静态初始化的简化方法,分别定义了4个长度一样的一维数组的二维数组和4个长度不一样的一维数组的二维数组。
1.4 二维数组的遍历。简单来说,对于二维数组的遍历,我的理解可以说成是分别对于每一个一维数组的遍历,这样感觉更加容易理解和记忆,因此用两个for循环嵌套就可以简单的搞定了。外层循环来控制一维数组的索引,内层循环对于某个一维数组进行遍历就可以了。
代码示例:
//定义一个4个长度不同样的一位数组的二维数组,并遍历
int[][] arr = {{1,3,1},{3,2},{4,1,5,2},{78,152,4}};
//for循环进行遍历
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
运行结果:
一个简单的二维数组遍历就写完了。
2. 形式参数问题
2.1 如果形式参数是基本类型,即之前说过的四类八种byte,short,int,long,char,float,double,boolean,这些传递的的值,形式参数的改变,不影响实际参数。
代码示例:
public static void main(String[] args) {
int a = 15;
int b = 25;
System.out.println("a:"+a+" "+"b:"+b);
add(a,b);
System.out.println("a:"+a+" "+"b:"+b);
}
private static void add(int a, int b) {
a+=5;
b++;
System.out.println(a+b);
System.out.println("a:"+a+" "+"b:"+b);
}
运行结果:
可以看出来基本数据类型经过传值计算后,本身的值并没有发生改变。
2.2 如果形式参数是引用类型,传递的是指向的地址,形式参数的该变,直接影响实际参数。
代码示例:
public static void main(String[] args) {
int[] arr = {32,12,123};
System.out.println("输出一次数组元素:");
printArray(arr);
sub(arr);
System.out.println("最后输出一次数组元素:");
printArray(arr);
}
//定义遍历数组方法
private static void printArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
}
//定义测试方法
private static void sub(int[] arr) {
for (int i = 0; i < arr.length; i++) {
arr[i]-=i;
}
System.out.println("进行操作后输出数组元素:");
printArray(arr);
}
运行结果:
通过两段代码可以很容易看出二者之间的区别。
3. 数组的高级操作
3.1 冒泡排序:相邻的两个元素进行比较,小的放前面,大的放后面
简单的来说,冒泡排序就是对n个无序数字进行的排序算法,总共进行n-1趟排序,每趟都把依次大的值放到数组从最后面依次向前的位置上,n-i趟后,数组就变得有序了,这里给出一个自己写的代码示例:
public static void main(String[] args) {
//创建一维数组
int[] arr = {45,1,21,14,45,54,57};
//用冒泡排序进行排序
for (int i = 0; i < arr.length-1; i++) {
for (int j = 0; j < arr.length-1-i; j++) {
if(arr[j+1]<arr[j]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
//调用方法进行遍历
printArray(arr);
}
//定义遍历方法
private static void printArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
}
这是一个java代码实现的冒泡排序算法,还有一个写好的遍历数组方法,测试没有问题,其实并不是太难去实现,主要把握好循环的写法。外层循环来控制次数,内层循环来控制逻辑。
运行结果:
3.2 选择排序
选择排序:和冒泡算法刚刚相反,从最小索引开始去和其他值进行比较,依次把小的值放到索引依次小的位置。
示例代码:
public static void main(String[] args) {
//使用选择排序对数组进行排序:int[] arr = { 24, 69, 80, 57, 13 };
int[] arr = { 24, 69, 80, 57, 13 };
//for循环进行选择排序
for (int i = 0; i < arr.length-1; i++) {
for (int j = i+1; j < arr.length; j++) {
if(arr[j]<arr[i]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
//调用方法进行遍历
printArray(arr);
这里是一个选择排序的实现代码,调用上面的那个一的遍历方法printArray()进行遍历。
运行结果:
4. Arrays数组工具类:针对数组进行操作的工具类。提供了排序,转换等功能。
成员方法:
public static String toString(int[] a):把数组转成字符串
public static void sort(int[] a):对数组进行排序(有重载)
Arrays数组工具类能够极大的简化我们的代码,上面所写的两种算法代码以及遍历方法,都可以使用Arrays数组工具类简单又快捷的实现,仅仅是调用以下两个成员方法。
代码示例:
//public static String toString(int[] a):把数组转成字符串
int[] arr = {12,32,24,12,412,32};
String str = Arrays.toString(arr);
System.out.println(str);
//public static void sort(int[] a):对数组进行排序(有重载)
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
第一段代码就是利用了toString方法进行了数组遍历;第二段利用sort方法进行排序并利用toString方法遍历,代码特别简单。
运行结果:
- java学习(5)-二维数组以及排序算法
- Java学习第二周(2)--排序算法与二维数组
- java(4)--排序算法及二维数组
- 黑马程序员java学习第四天,数组以及排序算法
- java之数组的索引,排序以及二维数组
- java二维数组排序
- Java学习笔记(五)--二维数组 冒泡排序 选择排序 Arrays数组工具类
- java中二维数组排序
- Java二维数组冒泡排序
- java二维数组冒泡排序
- Java数组排序基础算法,二维数组,排序时间计算,随机数产生
- Java基础04天 学习笔记_数组进阶(数组排序,二分查找,进制转换,二维数组)
- java个人学习笔记05(进制装换+排序查找+二维数组)
- JAVA整型数组排序算法以及改进算法
- java学习笔记(十三)二维数组
- Java 一维数组,二维数组的定义声明 以及一维数组的 冒泡排序 以及二维数组的鞍点
- Java学习笔记之数组排序算法
- java-冒泡排序 选择排序 二维数组
- 拦截器的四种拦截方式以及Filter的执行顺序(17/4/8)
- 八皇后问题
- Java源码心中有数系列 java.lang.Object
- 在Mac下安装和使用Sublime2终端工具
- wordpress站点图标的修改
- java学习(5)-二维数组以及排序算法
- OPENCV库在DM8148 ARM上的移植
- 什么是设计模式?(Design pattern)--和生活结合更好理解
- Laravel 5.4--Validate (表单验证) 使用实例
- 练习
- 从今往后,永无止境
- 扫雷
- 垃圾回收算法详解(二)分代垃圾回收算法
- 最小生成树总结