文章目录
数组概述
数组声明和创建
内存分析
三种初始化方法
在创建数组后没初始化前,都会有个默认值 数值类为0
数组的四个基本特点
数组边界
数组的使用
For-Each 使用
public static void main(String[] args) {
int[] arrays = {1,2,3,4,5};
// 打印数组的值 for-each 快捷键 arrays.for
for (int array : arrays) {
System.out.println(array);
}
System.out.println("===================");
// 打印数组的和
int sum = 0 ;
for (int array : arrays) {
sum += array;
}
System.out.println(sum);
System.out.println("===================");
// 打印数组的最大值
int max = arrays[0];
for (int array : arrays) {
if(array>=max){
max = array;
}
}
System.out.println(max);
System.out.println("===================");
int[] result = reverse(arrays);
printArrays(result);
}
// 反转数组
public static int[] reverse(int[] arrays){
int[] result = new int[arrays.length];
for(int i = 0;i<arrays.length;i++){
result[i] = arrays[arrays.length-1-i];
}
return result;
}
// 打印数组元素
public static void printArrays(int[] arrays){
for (int array : arrays) {
System.out.print(array+"");
}
}
结果:
1
2
3
4
5
===================
15
===================
5
===================
54321
多维数组
Arrays类
如何快速查找Arrays中的方法
方法一:打开jdk的API文档(不再赘述)
方法二:在IDEA中直接打开
ctrl+左键点击Arrays类
结果如下:
点击Structure
展现出所有的Arrays的方法
Arrays类方法使用
import java.util.Arrays;
public class Demo09 {
public static void main(String[] args) {
int[] a ={1,5,666,46,1234,8461,222222,456,445};
System.out.println(a); //[I@4554617c 哈希code
Arrays.sort(a); //对数组进行排序:升序
//打印数组元素 (Arrays.toString
System.out.println(Arrays.toString(a));
Arrays.fill(a,0); //将数组全部元素填充为0
System.out.println(Arrays.toString(a));
Arrays.fill(a,2,4,2); //将数组中下标为[2,4)元素填充为2 注意:左闭右开
System.out.println(Arrays.toString(a));
}
}
结果:
[I@4554617c
[1, 5, 46, 445, 456, 666, 1234, 8461, 222222]
[0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 2, 2, 0, 0, 0, 0, 0]
冒泡排序
冒泡排序的代码实现:
public static void main(String[] args) {
int[] a = {1,5,666,46,1234,8461,222222,456,445};
sort(a);
System.out.println(Arrays.toString(a));
}
// 冒泡排序
// 1、比较数组中,两个相邻的元素,如果第一个数比第二个数大,我们就交换位置
// 2、每一次比较,都会产生一个最大,或者最小的数字
// 3、下一轮则可以少一次排序!
// 4、依次循环,直到结束!
public static void sort(int[] array){
// 外层循环,判断我们这个要走多少次
for (int i = 0; i < array.length; i++) {
boolean flag = false;//通过flag标识位减少没有意义的比较
// 内层循环,比较判断两个数,如果第一个数比第二个数大,我们就交换位置
for(int j = 0; j< array.length-1-i; j++){
int temp = array[j];
if(array[j] >= array[j+1]){
array[j] = array[j+1];
array[j+1] = temp;
flag = true;
}
if (flag == false){
break; //可以提前减少循环次数
}
}
}
}
结果:
[1, 5, 46, 445, 456, 666, 1234, 8461, 222222]
稀疏数组
稀疏数组的代码实现
public class Demo11 {
public static void main(String[] args) {
//1.创建一个二位数组11*11 0没有妻子 1黑棋 2白棋
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 < array1.length; i++) {
for (int j = 0; j < array1[0].length; j++) {
if(array1[i][j]!=0){
sum++;
}
}
}
System.out.println("有效值的个数:"+sum);
//2.创建一个稀疏数组的数组
int[][] array2 = new int[sum+1][3];
array2[0][0] = array1.length;
array2[0][1] = array1[0].length;
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];
}
}
}
// 输出稀疏数组
for (int[] ints : array2) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
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];
}
// 输出还原数组
System.out.println("输出还原数组");
for (int[] ints : array3) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
}
}
结果:
输出原始的数组:
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
===============================
有效值的个数:2
11 11 2
1 2 1
2 3 2
===============================
还原数组
输出还原数组
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0