Java基础(六)数组

数组

一、一维数组

1. 数组

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

  • 数组元素
    构成一个数组的每一个数据称为数组元素。
  • 数组下标
    下标是数组元素在数组中的位置。从0开始,也叫数组索引。
  • 数组大小
    数组中元素的个数叫做数组的大小,也叫做数组的长度。

2. 数组使用步骤

  • 定义数组
    格式:数据类型 数组名[];数据类型[] 数组名;
int scores[];
int[] scores;

定义数组的本质是向 JVM 申请内存,JVM 将内存划分为几个区域,其中包含了堆和栈,不同的区域储存不同类别的数据,JVM 将数组的名称存储在栈中,栈是一种先进后出的数据结构,因此数组名在栈底。

  • 为数组元素分配内存

要让系统为数组元素分配存储空间,必须指出数组元素的个数,并通过 new 运算符为元素分配内存空间。

格式:数组名 = new 数组类型[数组长度];

scores = new int[5];

可以将定义数组和数组元素分配内存合并,例如:

int[] scores = new int[5];

分析:

  • 程序运行到 main 方法,main 方法进栈;
  • 声明数组,JVM 会在堆里分配内存;
  • scores 其实指向的就是堆里面的内存地址;
  • main 方法里面的代码执行完毕,main 方法出栈。
  • 数组元素初始化

数组声明并为数组元素分配空间完成后,必须为数组元素初始化赋值,才能使用数组元素。如果没有为数组元素初始化,那么数组元素也是默认值,各种类型数组元素默认值如下表:

数组元素类型 默认初始值
byte, short, int, long 0
float, double 0.0
chat ‘\u0000’ (空字符)
boolean false
引用数据类型 null

示例: 访问数组元素和赋值

import java.util.Arrays;

public class learn01 {
    public static void main(String[] args) {
        int[] score = new int[5];
        for (int i = 0; i < score.length; i++) {
            score[i] = i + 67;
        }
        for (int i = 0; i < score.length; i++) {
            System.out.println("score[" + i + "] = " + score[i]);
        }
        System.out.println(Arrays.toString(score));
    }
}

定义数组、为数组元素分配内存、数组元素初始化,这三步可以合并一起写

int[] scores = new int[]{12,56,34,78};
int[] scores = {12,56,34,78};

重要提示:
(1) Java将数据类型分为两大类,一类是基本数据类型,一类是引用数据类型。
(2) 它们的区别在于基本数据类型的变量中储存的是真实的数据值(如 scores[0],其真实数据 12);而引用数据类型的变量中储存的是内存地址编号(如上述例子中的组名 scores 就是引用数据类型,其值为内存地址编号)

  • 使用数组

示例: 求平均值

public class learn03 {
    public static void main(String[] args) {
        int[] scores = new int[]{67,78,65,88,79};
        int sum = 0;
        for (int i = 0; i < scores.length; i++) {
            sum += scores[i];
        }
        int avg = sum / scores.length;
        System.out.println(avg);
    }
}
  • 使用增强 for 遍历数组元素

JDK1.5 及其之后的版本中提供了增强 for 循环语句,实现了 lterable 接口的类都可以使用 for 循环进行元素的迭代。

public class learn03 {
    public static void main(String[] args) {
        int[] scores = {67,78,65,88,79};
        int sum = 0;
        for (int s :scores){
            sum += s;
        }
        int avg = sum / scores.length;
        System.out.println(avg);
    }
}
  • 数组排序
    • 冒泡排序:通过相邻元素的大小进行笔记,每一轮将一个最小或最大的数放到队列的最后面

示例: 从键盘输入5名学生的身高,使用冒泡排序,按照从高到低顺序输出每一位学生的身高

public class BubbleSorting {
    public static void main(String[] args) {
        int[] heights = {155, 165, 175, 170, 180};
        // 冒泡排序
        for (int i = 0; i < heights.length - 1; i++) {
            for (int j = 0; j < heights.length - 1 -i; j++) {
                if (heights[j] > heights[j + 1]){
                    int temp = heights[j];
                    heights[j] = heights[j + 1];
                    heights[j + 1] = temp;
                }
            }
        }
        for (int height: heights) {
            System.out.println(height);
        }
    }
}

你可能感兴趣的:(Java,java,开发语言)