数组的使用
- 普通for循环
- For-Each循环(一般用来打印一些返回值)
- 数组作方法入参
- 数组作返回值
- 数组的基本使用代码如下:
package www.array;
public class addayDemo04 {
public static void main(String[] args) {
int[] arrays={1,2,3,4,5};
for (int array : arrays) {
System.out.println(array);
}
printArray(arrays);
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可以看出一个两行五列的数组
- 简单运用代码如下:
package www.array;
public class arrayDemo04 {
public static void main(String[] args) {
int[] arrays={1,2,3,4,5};
int[][] array={{1,2},{2,3},{3,4},{4,5}};
System.out.println(array[0][0]);
System.out.println(array[0][1]);
print(array[1]);
for (int i = 0; i <array.length ; i++) {
for (int j = 0; j <array[i].length ; j++) {
System.out.print(array[i][j]+" ");
}
}
}
public static void print(int[] array){
for (int i = 0; i <array.length ; i++) {
System.out.println(array[i]);
}
}
}
数组的扩展
Arrays类
-
数组的工具类java.util.Arrays -
由于数组对象本身并没有什么方法可以供我们调用,但ApI中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作 -
查看JDK帮助文档 -
Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接十一月类名进行调用,而不用使用对象来调用(注意:是不用 而不是 不能) -
具有一下常用功能: -
给数组赋值:通过fill方法 -
对数组排序:通过sort方法,按升序 -
比较数组:通过equals方法,方法比较数组中元素的值是否相等 -
查找数组元素:通过binarySearch方法能对排序好的数组进行二分查询 -
简单运用代码如下
package www.array;
import java.util.Arrays;
public class ArrayDemo05 {
public static void main(String[] args) {
int[] a={1,2,6,4,3,80,55,525,24};
int[] b={1,2,6,4,3,80,55,525,20};
if(Arrays.equals(a,b)){
System.out.println("相等");
}
System.out.println("不相等");
System.out.println(Arrays.toString(a));
Arrays.sort(a);
System.out.println(Arrays.toString(a));
Arrays.fill(a,3,6,0);
System.out.println(Arrays.toString(a));
Arrays.fill(a,0);
System.out.println(Arrays.toString(a));
}
}
冒泡排序
- 冒泡排序无疑是最为出名的排序算法之一,总共有八大排序
- 冒泡排序的代码还是相当简单的,两层循环,外层冒泡轮数,里程依次比较
- 我们看到嵌套循环,应该立马就可以得出这个算法的时间复杂度为O(n2).
- 代码实现如下:
package www.array;
import java.util.Arrays;
public class ArrayDemo06 {
public static void main(String[] args) {
int[] a={2,3,45,63,535,45,46,6,636,6346};
int[] sort = sort(a);
System.out.println(Arrays.toString(a));
}
public static int[] sort(int[] array){
int temp=0;
for (int i = 0; i < array.length; i++) {
for (int j = 0; j <array.length-1-i ; j++) {
if(array[j+1]<array[j]){
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
}
return array;
}
}
java中数据交换位置的方法
- 首先定义一个变量为零,用来接收数据
- 将第一个数据中的值放入变量中,则第一个数据中的值为空
- 将第二个数据中的值放入第一个数据中,则第一个数据的值为第二个数据的,第二个数据的值为空
- 将变量中的数据放入第二个数据中去,则第二个数据中的变量为第一个数据的值
- 代码如下:
package www.array;
public class ArrayDemo07 {
public static void main(String[] args) {
int i=10;
int b=20;
int numbs=0;
numbs =i;
i=b;
b=numbs;
System.out.println(i);
System.out.println(b);
}
}
稀疏数组
- 需求:编写五子棋游戏中,有存盘和退出和续上盘的功能
- 分析问题:因为该二维数组的很多值是默认值0,因此记录了很多没有意义的数据
- 解决:稀疏数组
稀疏数组介绍
- 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组
- 稀疏数组的处理方式是:
- 记录数组一共有几行几列,有多少个不同值
- 把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模
- 代码实现编写五子棋游戏中,有存盘和退出和续上盘的功能如下
package www.array;
public class arrayDemo08 {
public static void main(String[] args) {
int[][] array1=new int[11][11];
array1[1][2]=1;
array1[2][3]=2;
System.out.println("输出原始的数组");
for (int[] ints : array1) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
System.out.println("=============");
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);
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("还原");
int[][] array3=new int[array2[0][0]][array2[0][1]];
for (int i = 1; i <array2.length ; i++) {
array3[array2[i][0]][array2[i][1]]=array2[i][2];
}
System.out.println("输出还原的数组");
for (int[] ints : array3) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
}
}
代码实现效果如下图:
|