Java05数组
Java05数组

数组概述

数组的声明创建与初始化


package com.mingmao.javaarray;
public class ArrayDeclarationAndCreation {
public static void main(String[] args) {
//变量类型 变量名=变量值
//先定义后创建,默认初始化
int[] arr1;
arr1=new int[10];
//定义并创建,默认初始化
int[] arr2=new int[10];
//动态初始化
arr2[0]=3;
arr2[3]=8;
arr2[9]=6;
//...没赋值的为默认值
//静态初始化
int[] arr3={1,2,3,4,5};
}
}
内存分析




数组使用

package com.mingmao.javaarray;
public class ArrayUsage {
public static void main(String[] args) {
int[] arr={1,2,3,4,5};
//打印所有元素
for (int i=0;i<arr.length;i++) {
System.out.println(arr[i]+"\t");
}
System.out.println();
//打印所有元素的和
int sum=0;
for (int i = 0; i <arr.length; i++) {
sum+=arr[i];
}
System.out.println("sum="+sum);
//打印数组中的最大元素
int max=arr[0];
for (int i = 0; i <arr.length; i++) {
max=(max>arr[i])?max:arr[i];
}
System.out.println("max="+max);
//for each循环,无法获取下标
for (int i : arr) {
System.out.print(i+"\t");
}
System.out.println();
//调用方法
printArray(arr);
int[] arr2=invertArray(arr);
printArray(arr2);
}
//数组可作为参数传递给方法
//打印数组
public static void printArray(int[] arr){
for (int i = 0; i <arr.length; i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
}
//反转数组 ,数组做返回值
public static int[] invertArray(int[] arr){
int temp=0;
for (int i = 0; i <=arr.length/2; i++) {
temp=arr[i];
arr[i]=arr[arr.length-1-i];
arr[arr.length-1-i]=temp;
}
return arr;
}
}
多维数组


package com.mingmao.javaarray;
import java.util.jar.JarOutputStream;
public class MultidimensionalArray {
public static void main(String[] args) {
//定义创建与初始化
//静态
int[][] arr1={{1,2,3,4},{1,2,3}};
System.out.println(arr1[1][2]);
System.out.println(arr1[0].length);
System.out.println(arr1[1].length);
printArray2(arr1);
}
//打印二维数组
public static void printArray2(int[][] arr){
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();
}
}
}
Arrays类

可参考JDK帮助文档
package com.mingmao.javaarray;
import java.util.Arrays;
public class ArraysClass {
public static void main(String[] args) {
int[] arr={33,5,6,7,89,900,43,78,2,31};
//打印数组元素
System.out.println(Arrays.toString(arr));
//排序--升序
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
//给数组填充成某个常数
Arrays.fill(arr,5);
System.out.println(Arrays.toString(arr));
//指定范围的填充
Arrays.fill(arr,2,5,4);
System.out.println(Arrays.toString(arr));
}
}
冒泡排序

package com.mingmao.javaarray;
import java.util.Arrays;
public class BubbleSortingAlgorithm {
public static void main(String[] args) {
int[] arr={2,4,1,67,89,45,36,9,37,79};
int[] arr3={2,4,1,67,89,45,36,9,37,79};
System.out.println(Arrays.toString(arr));
int[] arr1=bubbleSorting(arr);
System.out.println(Arrays.toString(arr1));
System.out.println(Arrays.toString(arr3));
int[] arr2=bubbleSorting1(arr3);
System.out.println(Arrays.toString(arr2));
}
//冒泡排序法
public static int[] bubbleSorting(int[] arr){
int temp=0;
int time=0;
for (int j = 0; j <arr.length; j++) {
time++;
for (int i = arr.length-1; i >j; i--) {
if(arr[i]<arr[i-1]){
temp=arr[i];
arr[i]=arr[i-1];
arr[i-1]=temp;
}
}
}
System.out.println("执行次数:"+time);
return arr;
}
//冒泡排序优化,如果已经排好序了,就没必要再循环
public static int[] bubbleSorting1(int[] arr){
int temp=0;
int time=0;
layer1:for (int j = 0; j <arr.length; j++) {
time++;
boolean flag=false;
for (int i = arr.length-1; i >j; i--) {
if(arr[i]<arr[i-1]){
temp=arr[i];
arr[i]=arr[i-1];
arr[i-1]=temp;
flag=true;
}
}
if(flag==false){
break layer1;
}
}
System.out.println("执行次数:"+time);
return arr;
}
}
稀疏数组


package com.mingmao.javaarray;
import java.util.Arrays;
public class SparseArray {
public static void main(String[] args) {
int[][] arr=new int[11][11];
arr[1][2]=1;
arr[2][3]=2;
int[][] arr1=compactSparseArray(arr);
System.out.println(Arrays.deepToString(arr1));
int[][] arr2=restoreCompressedArray(arr1);
System.out.println(Arrays.deepToString(arr2));
}
//压缩稀疏数组
public static int[][] compactSparseArray(int[][] arr){
int num1=0;
int numrow=getValidValues(arr);
int[][] arr1=new int[numrow+1][3];
arr1[0][0]=arr.length;
arr1[0][1]=arr[0].length;
arr1[0][2]=numrow;
for (int i = 0; i <arr.length; i++) {
for (int j = 0; j <arr[i].length; j++) {
if(arr[i][j]!=0){
num1++;
arr1[num1][0]=i;
arr1[num1][1]=j;
arr1[num1][2]=arr[i][j];
}
}
}
return arr1;
}
//获取数组有效值的个数
public static int getValidValues(int[][] arr){
int num=0;
for (int i = 0; i <arr.length; i++) {
for (int j = 0; j <arr[i].length; j++) {
if(arr[i][j]!=0){
num++;
}
}
}
return num;
}
//还原压缩数组
public static int[][] restoreCompressedArray(int[][] arr){
int[][] arr2=new int[arr[0][0]][arr[0][1]];
for (int i = 1; i <=arr[0][2]; i++) {
arr2[arr[i][0]][arr[i][1]]=arr[i][2];
}
return arr2;
}
}

浙公网安备 33010602011771号