java数组

数组

数组是相同类型数据的有序集合.
数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。
其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们.

数组的声明和创建

首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:

Java中使用new字符创建数组:

数组的元素是通过索引访问的,数组索引从О开始。获取数组长度:array.length

练习

//变量类型  变量名字 = 变量的值
    int[] nums;//声明数组
    nums = new int[4];//创建数组    数组中可以存放多少个数
    nums[0] = 2;//索引从0开始
    nums[1] = 3;
    nums[2] = 4;
    nums[3] = 6;
    System.out.println(nums[3]);//输出索引数为3的数字
	
    int sum =0;
    for (int i = 0; i < nums.length; i++) {
        sum = sum + nums[i];
    }
    System.out.println("和为:"+sum);
}

内存分析

变量的类型存放在栈中

new的对象储存在堆中

三种初始化

//静态初始化     创建+赋值
int[] a = {1,2,3,4,5,6,7,8,9};
//同上int[] ab = new int[]{1};
System.out.println(a[0]);
//动态初始化
int[] aa = new int[6];
aa[0] = 10;
System.out.println(aa[1]);
//数组的默认初始化
数组的某一个索引没有被赋值,则默认初始化为0

小结:

数组的四个基本特点:

  • 其长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
  • 其元素必须是相同类型,不允许出现混合类型。
  • 数组中的元素可以是任何数据类型,包括基本类型和引用类型。
  • 数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。

数组边界

数组下标取到规定数组长度以外

数组下标越界异常: javalang.ArrayIndexOutOfBoundsException

小结:

  • 数组是相同数据类型(数据类型可以为任意类型)的有序集合
  • 数组也是对象。数组元素相当于对象的成员变量
  • 数组长度的确定的,不可变的。如果越界,则报: ArraylndexOutofBounds

数组的使用

  • 普通的For循环
  • For-Each循环
  • 数组作方法入参
  • 数组作返回值

基本数组

//打印全部数组元素
int[] numa = {10,20,30,40,50,60};
for (int i = 0; i < numa.length; i++) {
    System.out.println(numa[i]);
}
//计算总和
int sum =0;
for (int i = 0; i < numa.length; i++) {
    sum+=numa[i];
}
System.out.println("和为"+sum);
//查找最大元素
int a = numa[0];
for (int i = 0; i < numa.length; i++) {
    if (a <numa[i]){
        a=numa[i];
    }
}
System.out.println(a);

数组增强

int[] arrays = {1, 2, 3, 4, 5,6};
//        for (int i : array) {//for (循环变量类型 循环变量名称 : 要被遍历的对象) 循环体
//            System.out.println(i);
//        }

//        printarray(arrays);
        int[] reserve = reserve(arrays);//调用reserve方法,并将arrays数组中的数字保存在reserve数组中
        printarray(reserve);//打印reserve数组
    }
        //打印数组元素
        public static void printarray(int[] arrays){
            for (int i = 0; i < arrays.length; i++) {
                System.out.print(arrays[0]+" ");
            }
        }
        //反转数组
        public static int[] reserve(int[] arrays){
        int[] result = new int[arrays.length];
            for (int i = 0,j =result.length-1; i < arrays.length;j--,i++) {
                result[j] = arrays[i];
            }
            return result;
        }

二维数组

基本形式:int[][] a =new int[2][5];

//二维数组,n行,两列
    int[][] a = new int[][]{{1,1},{2,3}};

    System.out.println(a[0][0]);//第一行第一列的数字
    System.out.println(a[0][1]);//第一行第二列的数字
    System.out.println(a[1][0]);//第二行第一列的数字
    System.out.println(a[1][1]);//第二行第二列的数字

    printarray(a[0]);//第一行全部的数字

    //多维数组
    int[][][][][][] b =new int[][][][][][]{};//最多可以建多少个?
}

//打印数组元素
public static void printarray(int[] arrays){
    for (int i = 0; i < arrays.length; i++) {
        System.out.print(arrays[0]+" ");
    }
}

Arrays类

public static void main(String[] args) {
int[] a = {1,54545,8,63,445,9,6};
        System.out.println(a);
        //打印数组元素 Arrays.toString()
        System.out.println(Arrays.toString(a));

        printArrays(a);
        Arrays.sort(a);//升序
        printArrays(a);
        //填充数组
       Arrays.fill(a,2,5,3);
        printArrays(a);
    }
    //Arrays.toString() 方法
    public static void printArrays(int[] b){
        for (int i = 0; i < b.length; i++) {
            if (i==0){
                System.out.print("[");
            }
            if (i==b.length-1){
                System.out.print(b[i]+"]");
            }else {
                System.out.print(b[i]+","+" ");
            }
        }
    }

Arrays详解https://www.cnblogs.com/wei-jing/p/10540192.html

冒泡排序

1.原理:比较两个相邻的元素,将值大的元素交换到右边

2.思路:依次比较相邻的两个数,将比较小的数放在前面,比较大的数放在后面。

public static void main(String[] args) {
    int[] array ={1,5,454,4,648,1,454,7,1};
    int[] sort = sort(array);
    System.out.println(Arrays.toString(sort));
}
public static int[] sort(int[] b){
    //临时变量
    int temp =0;
    for (int i = 0; i < b.length-1; i++) {
        boolean flag =false;//如果改数组已经排序,则跳出循环.减少没有意义的比较
        //内层循环,比较两个数,如果第一个数比第二个数大则交换位置
        for (int j = 0; j < b.length-1-i; j++) {
            if (b[j+1]<b[j]){
             temp= b[j];
             b[j]=b[j+1];
             b[j+1] =temp;
             flag = true;
            }
        }
        if (flag ==false){
            break;
        }
    }
    return b;
}

算法复杂度https://www.iteye.com/blog/univasity-1164707

稀疏数组

稀疏数组可以看做是普通数组的压缩,但是这里说的普通数组是值无效数据量远大于有效数据量的数组

例如:

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+"	");
        }
        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]+"	"
                +array2[i][1]+"	"
                +array2[i][2]+"	");
    }
    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 : array1) {
        for (int anInt : ints) {
            System.out.print(anInt+"	");
        }
        System.out.println();
    }
}
原文地址:https://www.cnblogs.com/LZC1402548603/p/14383542.html