数组

数组长度是确定的,数组一旦确定,大小不可更改;

其元素必须是相同类型,不允许出现混合类型;

数组中元素可以是任何数据类型,包括基本类型和引用类型;

数组变量属引用类型,数组可以看作是对象,数组中每个元素相当于该对象的成员变量;

数组本身就是对象,java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。

数组使用

 

package com.wang.array;
import javafx.scene.transform.Scale;
import java.util.Scanner;
public class Demo01 {
    public static void main(String[] args) {
        int[] nums;//声明数组
        nums=new int[10];//创建数组,数组中可存放十个int类型的数字
        Scanner scanner=new Scanner(System.in);
        System.out.println("给数组中元素赋值");
        for(int i=0;i<nums.length;i++){
            nums[i]=scanner.nextInt();
        }
        //计算所有元素的和
        int sum=0;
        for(int i=0;i<nums.length;i++){
            sum=sum+nums[i];
        }
        System.out.println(sum);
    }
}
一元数组
public static void main(String[] args) {
        int[] array={1,2,3,4,5};
        //打印数组元素
        for(int i=0;i<array.length;i++){
            System.out.println(array[i]);
        }
        //计算所有元素的和
        int sum=0;
        for(int i=0;i<array.length;i++){
            sum=sum+array[i];
        }
        System.out.println(sum);
        //查找最大元素
        int max=array[0];
        for(int i=0;i<array.length;i++){
            if(array[i]>max){
                max=array[i];
            }
        }
        System.out.println(max);
        //增强型for循环
        for (int i : array) {
            System.out.println(i);
        }
    }
二元数组
        public static void main(String[] args) {
        int[][] a={{1,2},{2,3},{3,4},{4,5}};
        for (int i=0;i<a.length;i++){
            for(int j=0;j<a[i].length;j++){
                System.out.println(a[i][j]);
            }
        }
   }

 

Arrays类

数组工具类java.util.Arrays

数组本身并没有什么方法可以供我们调用,但在API中提供了一个工具类Arrays供我们使用,从而对数据对象进行一些基本操作

Arrays类中的方法都是static修饰的静态方法,在使用的时候直接使用类名进行调用,而不用使用对象来调用。

常用功能:给数组赋值:fill方法

                   给数组排序:sort方法

                   比较数组:equals方法比较数组中元素值是否相等

                   查找数组元素:通过binarySearch方法能对排好序的数组进行二分查找法操作

冒泡排序法
package com.wang.array;
import java.util.Arrays;
//冒泡排序法
public class Demo06 {
    public static void main(String[] args) {
        int[] a={3,2,0,54,214,55,4,0};
        int[] sort=sort(a);//调用完自己写的排序方法后,返回一个排序后的数组
        System.out.println(Arrays.toString(sort));
    }
    public static int[] sort(int[] array){
        for(int i=0;i<array.length-1;i++){
            for (int j=0;j<array.length-1-i;j++){
                if(array[j+1]<array[j]){
                    int temp=array[j];
                    array[j]=array[j+1];
                    array[j+1]=temp;
                }
            }
        }
        return array;
    }
}

稀疏数组

当一个数组中大部分元素为0,或者为同一值得数组时,可以使用稀疏数组来保存该数组。

稀疏数组的处理方法: 记录数组一共有几行几列,有多少个不同值

                                     把具有不同值得元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模

package com.wang.array;

import java.util.Arrays;

//稀疏数组
public class Demo07 {
    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 i=0;i<array1.length;i++){
            for(int j=0;j<array1[i].length;j++){
                System.out.print(array1[i][j]+"\t");
            }
            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("还原稀疏数组:");
        //读取稀疏数组的值
        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];
        }
        //打印
        for(int i=0;i<array3.length;i++){
            for(int j=0;j<array3[i].length;j++){
                System.out.print(array3[i][j]+"\t");
            }
            System.out.println();
        }
    }
}

 

posted @ 2019-10-26 19:33  王迎婧  阅读(164)  评论(0编辑  收藏  举报