本文最后更新于:1 年前

Java笔记——数组

创建时间:2019.11.20

说明:持续更新ing

——————————————————————————— 我 是 分 割 线 ————————————————————————————

数组


  1. 数组是一组相同类型的变量(元素)的集合。可以用来存放一组相同类型的数据。数组的学习涉及数组的定义、赋值和使用。再扩展一点就是二维数组的应用。数组既是一种重要的数据类型,也是一种重要的数据结构。

  1. 数组(array)————一组相同类型的变量(元素)集合

    • 相同任意类型 (包括基本类型、类类型等)

    • 这组变量被连续地存放在Java堆区的内存空间

    • 数组是一种引用类型,数组名是一个地址的别名

    • 数组需要创建(new),否则不会被分配空间

    • 数组名对应的地址单元中存放上述连续堆区空间的首地址

      🔺 对程序员而言, 数组总体有三样东西:数组名+数组长度+数组元素


  1. “声明、创建、初始化、访问”数组

声明数组:

🔺只给数组变量(由数组名描述)分配空间,而不会给数组按要存放的元素的多少来分配空间。
  • 有两种形式——>推荐第一种: 数据类型[] 数组名
//数据类型[]	数组名
int[]	a;

//数据类型		数组名[]
int		a[];

——————————————————————————— 我 是 分 割 线 ————————————————————————————

创建数组:new运算符,同对象的创建。

  • 有两种形式——>
//先声明,后创建
int[] a; //声明存放int型数据的数组a
a = new int[10]; //在Java堆区中创建10个int型元素空间(共40个字节)

//声明和创建合一
int[]	test = new int[12];

注意:

  1. 🔺声明数组,仅仅创建数组变量
    🔺创建数组,才在堆区中分配空间

  2. [ ]中必须是非负整数,否则执行时异常。可以是字面常量、也可以是变量,只要保证其值是非负整数

  3. 创建数组之后,各元素的默认初始值是:数值型为0(0.0);字符型’\0’;引用类型null;布尔型false

——————————————————————————— 我 是 分 割 线 ————————————————————————————

初始化数组:在创建好的数组元素空间中存放初始值.否则按默认值初始化。

🔺数组创建时(即new时使用)初始化器语法:{元素值列表}

//声明存放int型数据的数组aMonth并初始化
int[] aMonth = new int[]{1,2,3,4,5,6,7,8,9,10,11,12};

注意:

  • 使用了初始化器之后不能显式指定长度

    new int[12]{…} ,不对

int[] a; 				//先声明数组a
a = new int[2]{1,2}; 	// Error,不能显式指明长度[2]
a = {1,2}; 				// Error
a = new int[]{1,2}; 	// OK!
int[] b = {1, 2}; 		// OK!此方式用得最多

——————————————————————————— 我 是 分 割 线 ————————————————————————————

访问数组:

🔺数组元素:数组中的每一个变量,也被称为下标变量,索引变量

🔺下标从0开始:用[ ]运算符访问元素,即 数组名 [ 数组下标 ]

🔺既然是变量,所以数组元素可以作为左值也可以作为右值,比如a[i]++b[0]=5;a=b[0]+2;等等。


  1. 数组长度属性

🔺数组唯一的一个 只读 属性:length 存有数组元素个数值

🔺*数组名.length *


  1. 遍历数组

🔺增强版for语句:foreach语句(JDK5开始提供)

🔺适用于遍历数组、集合元素等形式

for(元素的数据类型 遍历变量x : 遍历对象obj){ //x是自定义遍历变量名
    引用了x的Java语句; //循环体 
}

注意:

  1. foreach语句是for的简化,任何foreach语句都可以改用for语句,反之不行
  2. foreach语句不关注下标
  3. 用foreach的遍历变量不能修改元素值
public class Demo { 
    public static void main(String[] args) { 
         int[] a = {1, 3, 4, 5, 6, 8, 10}; 
        /* 循环输出a */ 
        for(int n : a){ // 利用变量n遍历数组a 
            System.out.printf("%4d ", n); // n表示数组a的每一个元素值 
    	} 
    } 
}

  1. 二维数组、多维数组

image.png

image.png

image.png

image.png


  1. Arrays 类

主要功能:

🔺java.util.Arrays类: 数组操作实用类,它提供了一系列静态方法

  • equals()方法:比较两个数组长度是否相同和对应索引上的元素值是否相同.
  • fill()方法:向数组中填充数据.
  • copyOf()方法:复制一个数组的部分元素并生成一个新的数组返回
  • sort()方法:若是基本类型则把数组元素按自然顺序升序排列.若是引用类型,其该实现了Comparable接口才能调用sort方法,否则报异常.
  • binarySearch()方法:对已排序数组使用二分查找算法查找指定元素.
  • asList()方法:返回数组的List对象形式.
  • toString()方法:返回包含所有元素信息的字符串
  • parallelSort()方法:开启多线程的排序.
  • deepEquals()方法:深度比较两个数组是否相同.适于任何深度的多维(嵌套)数组.

  1. 问:数组可以作为方法的参数或返回值吗?

当然是可以的 。答案来源 m博客

  1. 数组作为方法参数

🔺数组作为方法参数传递,传递的参数是数组内存的地址

public static void main(String[] args) {
    int[] arr = {11, 22, 33, 44, 55};
    System.out.println("1位置: " + arr);
    printArray(arr);  // 数组作为方法参数传递,传递的参数是数组内存的地址
}
public static void printArray(int[] arr) {
    System.out.println("2位置: " + arr);
    for (int i = 0; i < arr.length; i++) {
        System.out.println(arr[i]);
    }
}
1234567891011

在这里插入图片描述

  1. 数组作为方法返回值

🔺数组作为方法的返回值,返回的是数组的内存地址

public static void main(String[] args) {
    //调用方法,接收数组的返回值
    //接收到的是数组的内存地址
    int[] arr = getArray();
    for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);        
    }
}
/*
  创建方法,返回值是数组类型
  return返回数组的地址
*/
public static int[] getArray() {
    int[] arr = { 1, 3, 5, 7, 9 };
    //返回数组的地址,返回到调用者
    return arr;
}
1234567891011121314151617

在这里插入图片描述

该博主的延伸阅读: Java–数组的定义和访问Java–数组原理内存图Java–数组的常见操作


  1. 判断: Java中数组可以动态改变长度?

错误。 Java中的数组的定义就是相同类型,固定长度的一组数据,一旦被初始化,长度不可更改。


10.


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!

Java笔记—继承 上一篇
教会你怎么安装和使用 Visio 哦 ~ ~ 下一篇

 目录