Document

Java数组 :数组、Arrays类、排序

一.数组

数组是一个变量,存储相同数据类型的一组数据

数组的结构和基本要素

标识符:数组的名称,用于引用不同的数组

数组元素:向数组中存放的数据

元素下标:对数组元素进行编号,数组下标从0开始

元素类型:数组元素的数据类型 

【注】声明一个数组就是在内存空间划出一串连续的空间

 

  1. 1.    一维数组

数组的声明及赋值

                   /**第一种直接赋值**/

int[] score = {89, 79, 76};

/**第二种new 方式创建**/

int[] score = new int[]{89, 79, 76};

                    int[] score =new int[4];

/**第三种动态赋值**/

Scanner input = new Scanner(System.in);

                    for(int i=0;i<score.length;i++){

                         score[i]=input.nextInt();

                    }

【实例 1】:求5人的平均成绩

Scanner sc=new Scanner(System.in);

int[] arr=new int[5];

int sum=0;

int avg=0;

System.out.println("请输入5个人的成绩:");

for(int i=0;i<arr.length;i++){

        System.out.println("第"+(i+1)+"个人的成绩为:");

        arr[i]=sc.nextInt();

        sum+=arr[i];

}

avg=sum/arr.length;

System.out.println("这个5个人的平均成绩为:"+avg);

【实例 2】:求5人的平均成绩

Scanner sc=new Scanner(System.in);

int[] arr=new int[5];

int sum=0;

int avg=0;

System.out.println("请输入5个人的成绩:");

for(int i=0;i<arr.length;i++){

        System.out.println("第"+(i+1)+"个人的成绩为:");

        arr[i]=sc.nextInt();

        sum+=arr[i];

}

avg=sum/arr.length;

System.out.println("这个5个人的平均成绩为:"+avg);

  1. 2.    二维数组

数组的声明

 

int [ ][ ] scores;   //定义二维数组

scores=new int[5][50];  //分配内存空间

或者

int [ ][ ] scores = new int[5][50];

数组的赋值

/**第一种**/

int[][] scores= {{ 90, 85, 92, 78, 54 }, { 76, 63,80 }, { 87 } };

/**第二种**/

int[][] scores=new int[][]{ { 90, 85, 92, 78, 54 }, { 76, 63,80 }, { 87 }};

【实例 1】:求3个班级每个班级的总成绩

int [][] array = new int[][]{{80,66},{70,54,98},{77,59}}; //三个班的成绩

int total; //保存总成绩

for(int i = 0; i < array.length; i++) {

        String str = (i+1) + "班";

        total = 0; //每次循环到此都将其归0

        for(int j = 0; j < array[i].length; j++) {

                total += array[i][j]; //成绩叠加

        }

        System.out.println(str+"总成绩:" + total);

}

 

 

二.Arrays

【注】Arrays类提供了操作数组的一些static方法,其常用方法如下:

方法名称

说   明

boolean equals(array1,array2)

比较array1和array2两个数组是否相等

sort(array)

对数组array的元素进行升序排列

String toString(array)

该方法将一个数组array转换成一个字符串

void fill(array,val)

把数组array所有元素都赋值为val

copyOf(array,length)

把数组array复制成一个长度为length的新数组,返回类型与复制的数组一致

int binarySearch(array, val)

查询元素值val在数组array中下标(要求数组中元素已经按升序排列)

1、复制数组System.arraycopy(),用它复制数组比用for循环复制要快得多。

2、基本类型数组和对象数组都可以复制,然而,如果复制对象数组,那么只是复制了对象的引用——而不是对象本身的拷贝。这被称作“浅复制”。

3、数组的比较:

【注】对于Arrays.equals ,S1的所有元素指向同一个对象,而数组s2包含五个相互独立的对象,然而,数组相等是基于内容的(通过Object.equal()比较),所以结果为true。

Arrays .equal()

import java.util.Arrays;

public class Test{

   public static void main(String[] args){

      String[] s1 = new String[5];

      Arrays.fill(s1,"Hi");

      String[] s2 = {"Hi", "Hi", "Hi", "Hi", "Hi"};

      System.out.println(Arrays.equals(s1, s2));//true

      System.out.println(s1.equals(s2));//false

      System.out.println(s1==s2);//false

   }

}

4、数组元素的比较:

1).Java有两种方式来提供比较功能。第一种是实现java.lang.Comparable接口,此接口中只有compareTo(Object o)一个方法。

2).实现Comparator接口,重写两个方法compare(Object o1, Object o2)和equals(Object o)两个方法。

5、基本数据数组无法使用Comparator进行排序。

6、在使用binarySearch()时必须提供同样地Comparator(使用方法的重载版本)。

7、数组是效率最高的保持一组对象的方式,它是你的第一选择。而且,如果要保存基本类型,则只能用数组。

 

. 排序

  1. 1.    冒泡排序

【实例 1】:冒泡算法

int[] arr = { 14, 9, 8, 15, 34, 5 };

int temp=0;

for (int i = 0; i < arr.length-1; i++) {

for (int j = 0; j < arr.length-1-i;j++) {

         if (arr[j] >arr[j+1]) {

                temp = arr[j];

                arr[j] = arr[j+1];

                arr[j+1] = temp;

        }

     }

}

for (int i : arr) {

     System.out.println(i);

}

 

  1. 2.    选择排序

【实例 1】:选择排序算法

int[] arr = { 14, 9, 8, 90, 34, 5,78 };

int minIndex;

int temp;

for (int i = 0; i < arr.length-1; i++) {

        minIndex=i;

        for (int j = i + 1; j < arr.length; j++) {

                 if (arr[j] < arr[minIndex]) {

                         minIndex =j;

                 }

        }

        if(minIndex!=i){

                 temp=arr[i];

                 arr[i]=arr[minIndex];

                 arr[minIndex]=temp;

        }       

}

for (int i : arr) {

        System.out.println(i);

}

原文地址:https://www.cnblogs.com/chenyanlong/p/7818840.html