Java数组

1.一维数组

1.1数组的定义

数组是一个具有相同数据类型,且按一定次序排列的一组变量的集合体。即用一个变量名表示一批数据。Java为数组在内存中分配的是一段连续的空间,这段空间中存储数据的个数是固定的。

1.1.1数组元素

构成一个数组的每一个数据称为数组元素。

1.1.2数组下标

下标是数组元素在数组中的位置。在一个数组中,数组下标是用整数表示的,从0开始,依次加1。

1.1.3数组大小

数组中,元素的个数被称作数组的大小,也叫作数组的长度。

1.2数组的使用

1.2.1定义数组

public static void main(String[] args) {
    int arr[];  //或者 int[] arr;
}

1.2.2为数组元素分配内存

    arr = new int[3];

1.2.3数组元素初始化

    arr[0] = 35;
    arr[1] = 26;
    arr[2] = 43;

数组初始化指为数组中的数组元素进行第一次赋值。如果没有对数组变量进行初始化,数组元素也会有相对应得默认初始值,各类型数组元素默认初始值如下:

数组元素类型 默认初始值
byte,short,int,long 0
float,double 0.0
char ‘u0000’
boolean false
引用数据类型 null

1.2.4使用数组

例:求班级五个同学成绩的平均值

public static void main(String[] args) {
    //第一步:定义数组,数组的名称是score
    int[] score;//或者int score[]
    //第二步:为数组元素分配内存
    score =new int[5];
    //第三步:为数组元素初始化
    Random random =new Random();
    for (int i =0; i 

1.3一维数组的常用算法

1.3.1创建一个成绩的数据,统计最大值,最小值,平均值,求和

public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int []score = new int[5];
        //成绩初始化
        for (int i = 0; i score[i]){
                min = score[i];
            }
        }
        System.out.println("最高分为"+max);
        System.out.println("最低分为"+min);
        //总分
        int sum = 0;
        for (int i = 0; i 

1.3.2冒泡排序

  1. 比较相邻的元素。如果第一个比第二个大,就交换它们两个。
  2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。这样,最后的元素就会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

例:输入5个人的身高,用冒泡排序进行升序排列

public static void main(String[] args) {
    //储存五个人的身高
    int height[] =new int[5];
    Scanner scanner =new Scanner(System.in);
    //循环输入五个人的身高
    for (int i =0; i height[j+1]){
                temp = height[j];
                height[j] = height[j+1];
                height[j+1] = temp;
            }
        }
    }
    //将排序后的结果进行输出
    System.out.println("5个人的身高从低到高依次是:");
    for (int i =0; i 

1.3.3选择排序

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

例:对80000个80000以内的随机数进行选择排序

public static void main(String[] args) {
    //选择排序
    int []arr =new int[80000];
    Random random =new Random();
    for (int i =0; i 

1.3.4插入排序

插入排序是指在待排序的元素中,假设前面n-1(其中n>=2)个数已经是排好顺序的,现将第n个数插到前面已经排好的序列中,然后找到合适自己的位置,使得插入第n个数的这个序列也是排好顺序的。按照此法对所有元素进行插入,直到整个序列排为有序。

例:对80000个80000以内的随机数进行插入排序

public static void main(String[] args) {
    //插入排序
    int[] arr =new int[80000];
    for (int i =0; i 0){
            if (arr[j] 

1.3.5快速排序

(1)首先设定一个分界值,通过该分界值将数组分成左右两部分。
(2)将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于分界值,而右边部分中各元素都大于或等于分界值。
(3)然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。
(4)重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。

例:对80000个80000以内的随机数进行快速排序

public static void main(String[] args) {
        //快速排序
        int[] arr = new int[80000];
        for (int i = 0; i = last){
            return;
        }
        int low = first;
        int high = last;
        //如果mid_value = arr[last]的话,下面的两个内部while循环就要换一下顺序
        int mid_value = arr[first];
        while (low = mid_value){
                high -= 1;
            }
            arr[low] = arr[high];
            while (low 

1.3.6二分查找

首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

例:

public static void main(String[] args) {
        int num[] = {3,9,12,48,67};
        int index = binarySearch(num,9);
        System.out.println(index);
    }
    private static int binarySearch(int[] srcArray, int des) {
        //定义初始最小、最大索引
        int start = 0;
        int end = srcArray.length - 1;
        //确保不会出现重复查找,越界
        while (start >>1;//防止溢出
            if (des == srcArray[middle]){
                return middle;
                //判断下限
            }else if (des 

1.4Arrays类的应用

JDK中提供了一个专门用于操作数组的工具类,即Arrays类,位于java.util包中。该类提供了一系列的方法来操作数组,如排序,比较,查询等。Arrays类常用方法如下表:

方法 返回类型 说明
equals(array1,array2) boolean 比较两个数组是否相等
sort(array) void 对数组array的元素进行排序
toString(array) String 将一个数组array转换成一个字符串
fill(array,val) void 把数组array的所有元素都赋值成val
copyOf(array,length) 与array数据类型一致 把数组array复制成一个长度为length的新数组
binarySearch(array,val) int 查询元素值val在数组array中的下标

1.4.1 比较两个数组是否相等equals()

public static void main(String[] args) {
        //比较两个数组是否相等(equals)
        int[] arr1 = {10,50,40,30};
        int[] arr2 = {10,50,40,30};
        int[] arr3 = {60,50,85};
        System.out.println(Arrays.equals(arr1,arr2));//判断arr1和arr2的长度及元素是否相等
        System.out.println(Arrays.equals(arr1,arr3));//判断arr1和arr3的长度及元素是否相等
}

1.4.2 对数组元素进行升序排序sort()

public static void main(String[] args) {
        //对数组元素进行升序排列(sort)
        int[][] score = new int[][] {{67,75},{78,93,82},{72,71}};
        for (int i = 0; i 

1.4.3 将数组转换成字符串toString()

public static void main(String[] args) {
        //将数组转换成字符串(toString)
        int[] arr = new int[]{10,50,40,30};
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
}

1.4.4 将数组所有元素赋值为相同的值fill(array,vall)

public static void main(String[] args) {
        //将数组所有元素赋值为相同的值(fill(array,vall))
        int[] arr =new int[]{10,50,40,30};
        Arrays.fill(arr,40);
        System.out.println(Arrays.toString(arr));
}

1.4.5 将数组赋值成一个长度为设定值的新数组copy()

public static void main(String[] args) {
        //将数组赋值成一个长度为设定值的新函数(copy)
        int[] arr1 = new int[]{10,50,40,30};

        //将arr1复制成长度为3的新数组arr2
        int[] arr2 = Arrays.copyOf(arr1,3);
        System.out.println(Arrays.toString(arr2));

        //将arr1复制成长度为3的新数组arr2
        int[] arr3 = Arrays.copyOf(arr1,4);
        System.out.println(Arrays.toString(arr3));

        //将arr1复制成长度为3的新数组arr3
        int[] arr4 = Arrays.copyOf(arr1,6);
        System.out.println(Arrays.toString(arr4));
}

1.4.6查询元素在数组中的下标binary(Object[],Object key)

public static void main(String[] args) {
        //查询元素在数组中的下标(binary(Object[],Object key))
        int[] arr = new int[]{10,50,40,30};
        Arrays.sort(arr);//排序后:10,30,40,50
        int index =Arrays.binarySearch(arr,40);
        System.out.println(index);
        index =Arrays.binarySearch(arr,0);
        System.out.println(index);
        index =Arrays.binarySearch(arr,45);
        System.out.println(index);
        index =Arrays.binarySearch(arr,90);
        System.out.println(index);
}

2.二维数组

2.1二维数组的结构

例:分别计算每个人班级学生的总成绩

public static void main(String[] args) {
        int[][] score = {
                {65,75},
                {78,82,93},
                {71,72}
        };
        //定义保存总成绩的变量total
        int total;
        //遍历二维数组,计算每个班的总成绩
        for (int i = 0; i 

3.利用数组解决的问题

3.1 从键盘输入班级学员的数量,然后输入每一位学员的成绩,最后将成绩按从大到小进行排序输出,并计算平均值。

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入学员人数:");
        int sum = 0;
        int i =scanner.nextInt();
        int score[] = new int[i];//定义数组
        //数组初始化
        for (i = 0; i 

3.2 定义如下数组 int[] array1=new int[]{34,45,56} ,编程实现向数组中再增加一个数字67。

public static void main(String[] args) {
        int array1[] =new int[]{34,45,56};
        int array2[] = Arrays.copyOf(array1,4);
        array2[3] = 67;
        System.out.println(Arrays.toString(array2));
}

3.3 将二维 int 类型的数组中每一行中最小的值取出,放到新的数组中。

public static void main(String[] args) {
        int arr1[][] ={
                {5,6,1,3},
                {9,2,7,4},
                {0,10,8}
        };
        int arr2[] = new int[arr1.length];
        for (int i = 0; i 

3.4 将二维 int 类型的数组中每一列中最小的值取出,放到新的数组中。

public static void main(String[] args) {
        //定义二维数组arr1
        int arr1[][] ={
                {5,6,1,4},
                {9,2},
                {7,0,4,32},
                {6,15}
        };
        //获取二维数组的最大行数
        int max=0;
        for (int i = 0; i  0)
                    arr3[j] = 0;
                }
            }
        }
        System.out.println(Arrays.toString(arr3));
}

【信息由网络或者个人提供,如有涉及版权请联系COOY资源网邮箱处理】

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容