• Java数组


    java数组

    java数组中的元素都是同一种类型。数组的长度再创建时确定,并且在创建后不变。如果需要建立存储不同类型数据的集合,或者要求这种数据存储结构的长度可以动态变化,可以使用java.util包中的各种集合类,如Vector等

    1.数组的声明

    可以声明任何类型的数组,包括基本类型和类类型的数据。数组声明和其他类型的变量声明一样,包括两个部分:数据的类型和数组的名字。数组声明语句有两种格式:

    // 第一种格式
    char s[];
    point p[]; //point 是一个类
    
    // 第二种格式
    char[] s;
    point[] p;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    注意:数组的声明中不指定数组的长度

    在Java中数组是作为类来处理的。Java中的类类型变量的声明不创建该类的对象。所以数组的声明并不创建实例数组的数据空间,而是给该数组变量分配了一个可以用来引用该数组的引用空间

    2.数组的创建与初始化

    2.1 用new创建数组

    数组元素所需的内存空间是通过new运算符或者通过数组初始化分配的。通过new运算符创建数组格式如下:

    new elementType[arraySize];
    // 例如
    s = new char[20];
    
    • 1
    • 2
    • 3

    数组在创建后呢,其元素是被系统自动进行初始化的。对于字符数组,每个元素都被初始化为’/u0000’,而对于对象数组,每个元素都被初始化为null。在通过new实例化一个数组后,就可以对数组元素进行赋值并进行其他操作,例如

    s[0] = 'a';
    s[1] = 'b';
    
    • 1
    • 2

    注意数组不要越界了,从0到len-1,数组在创建后在内存中布局如下,可以更好的理解

    在这里插入图片描述

    2.2 数组的长度

    java中为所有数组设置了一个表示数组元素个数的特性变量length,它作为数组的一部分被存储卡里。Java用该变量在运行时,对数组进行越界检查。访问数组长度格式如下

    arrayname.length;
    
    • 1

    数组在创建后长度是不可变的。不能去改变数组的长度。但可以使用该数组变量指向另一个全新的数组。例如:

    int a[] = new int[6];
    a[0] = 10;
    ....
    a = new int[10]; // 这样a就指向另一片空间了
    
    • 1
    • 2
    • 3
    • 4

    3.对象数组

    除了创建基本类型数组,还可以创建对象数组,例如,下列语句声明并创建了一个Point类型的数组;

    Point p[];
    p = new Point;
    // 创建十个Point对象
    for (int i = 0; i<10; i++){
    p[i] = new Point(i,i+1);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    执行了上述语句后,数字p在内存中的布局如图
    在这里插入图片描述

    4.通过初始化创建数组

    Java中可以在数组声明中直接给数组赋初值。这样可以通过一条语句完成数组的声明、创建与初始化。例如

    String names[] = {"jack","wang","lee"};
    // 声明并创建一个有两个元素的Data类型的数组 dates
    Date dates[] = {
    	new Date(10,9,2000),
    	new Date(10,9,2001);
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    多维数组

    Java语言的多维数组可以看作是数组的数组,即n维数组是n-1维数组的数组

    1.多维数组的声明

    多维数组的声明格式与一维数组相类似,只是要用多对[]表示数组的维度,n维就要用n个[]

    2.多维数组的实例化

    多维数字的实例化可以采用多种方式,并可以构造规则数组和不规则数组
    (1)直接为每一维分配内存,创建规则数组。例如:

    int a[][];
    a = new int [4][4];
    
    • 1
    • 2

    在内存中分配如图
    在这里插入图片描述
    (2)从最高维起,分别为每一维分配空间。这种方式可以构造不规则数组。例如

    int a[][] = new int [2][];
    a[0] = new int[10];
    a[1] = new int[5];
    
    • 1
    • 2
    • 3

    最高维的长度必须要先确定了

    增强的for循环

    在jdk5.0以后,为了便于对数组和集合中的元素进行迭代处理,Java中引入了一种增强的for循环形式,定义如下:

    for(类型 标识符: 可迭代类型的表达式) 语句;
    
    • 1

    其中,括号中的“类型 标识符” 指定了一种类型的标识符,该标识符的类型应与冒号后面的表达式的类型兼容。“可迭代类型的表达式” 一般说数组或集合,可理解为in ,例如

    int[] numbers = {1,2,3,4,5,6,7,8,9,10};
    for (int element : numbers) {
    	System.out.println(element);
    	}
    
    • 1
    • 2
    • 3
    • 4

    上述可以认为说 for each element in numbers do {…}

    数组的复制

    数组变量之间赋值是引用赋值,不能实现数组数据的赋值

    int a[] = new int[6];
    int b[];
    b = a;
    
    • 1
    • 2
    • 3

    在这里插入图片描述
    如果实在想进行数据的复制,使用Java语言在java.lang.System中提供的数组赋值方法

    public static void arraycopy(object source, int srcIndex, object dest, int destIndex, int length)
    
    • 1

    source — 源数组;srcIndex — 源数组开始复制的位置; dest — 目的数组; destIndex — 目的数组中开始存放复制数据的未知; length — 复制元素的个数

    一个例子如下
    class ArrayCopy 
    {
    	public static void main(String[] args) 
    	{
    		char[] copyFrom = {'d', 'e', 'c', 'a', 'f', 'f','e', 'i', 'n', 'a', 't','e'};
    		char[] copyTo = new char[7];
    
    		System.arraycopy(copyFrom, 2, copyTo,0 ,7 );
    		System.out.println(copyTo);
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

  • 相关阅读:
    【常用的 Git 命令及简要示例说明】
    汽车-ARM-PCIE-服务器-FPGA-ASIC分析
    内存马概念
    【LeetCode-简单题】977. 有序数组的平方
    【C++】unordered_set、unordered_map的介绍及使用
    计算机网络
    Dockerfile手册
    STM32 LWIP Server、Client如何判断网络异常
    线上展厅功能要点
    CC-Proxy配置实验室网络代理服务器
  • 原文地址:https://blog.csdn.net/abc1234564546/article/details/127134577