带你学习java的数组军队列

简介: 带你学习java的数组军队列

一、数组概述

1.1、数组概念

数组(Array),是多个相同类型数据一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。

1.2、 数组的特点:
  • 1 数组是序排列的
  • 2 数组属于引用数据类型的变量。数组的元素,既可以是基本数据类型,也可以是引用数据类型
  • 3 创建数组对象会在内存中开辟一整块连续的空间
  • 4 数组的长度一旦确定,就不能修改。
1.3、数组的定义
  • 数组的创建:

元素类型[] 数组名 = new 元素类型[元素个数或数组长度];

  • 声明数组变量
    必须在程序中声明数组,并指定数据类型;声明数据类型为int,容器使用数组那么如何标识数组呢?在java中我们使用[]符号标识,然后接着是定义数组的名称为arr,格式为 int[] arr。注意:int x[] 也是一种创建数组的格式。推荐使用int[] x 的形式声明数组。
  • 创建数组
    要使用一个新的关键字叫做new,new 用来在内存中产生一个容器实体,数据要存储是需要有空间的,存储很多数据的空间用new 操作符来开辟,new int[5]; 这个5是元素的个数。右边这部分就是在内存中定义了一个真实存在的数组,能存储5个元素。注意:new int[5] 做了两件事情,首先使用new int[3] 创建了一个数组,然后把这个数组的引用赋值给数组变量x。

思考: arr是属于什么数据类型?

任何一个变量都得有自己的数据类型。注意这个arr不是int 类型的 。int 代表的是容器里边元素的类型。那么x 是数组类型的,数组是一种单独的数据类型。数据类型分为2大派,分为基本数据类型和引用数据类型。 第二大派是引用数据类型。那么大家现在已经接触到了引用数据类型三种当中的一种。就是数组类型 [] 中括号就代表数组。

思考: int[] arr = new int[5];在内存中发生了什么?

内存任何一个程序,运行的时候都需要在内存中开辟空间.int[] arr = new int[5]; 这个程序在内存中是什么样?这就涉及到了java虚拟机在执行程序时所开辟的空间,那么Java开辟启动了多少空间呢?在后面我们会深入介绍。

定义数组主要有两种格式:

格式一:

元素类型[] 数组名 = new 元素类型[元素个数或数组长度]; 
示例:int[] arr1 = new int[5];
示例:float[] arr2 = new float[5];

格式二:

元素类型[] 数组名 = new 元素类型[]{元素,元素,……}; 
int[] arr1 = new int[]{3,5,1,7}; 
float[] arr2 = {1.3,1.5,1.1,1.7};

注意: 给数组分配空间时,必须指定数组能够存储的元素个数来确定数组大小,体现了数组长度固定的特点;创建数组之后不能修改数组的大小。可以使用length 属性获取数组的大小。

1.4、数组的初始化
  • 数组的声明与赋值
int[] arr = new int[2];
a[0] = 10;
a[1] = 20;

另一种方式也可以直接明确数组的长度,以及数组中元素的内容:

int[] arr = new int[]{20,30,40};
int[] arr = {20,30,40};

如果数组初始化中不使用运算符new。需要注意:下列写法是错误的:

int[] arr; 
arr = {20,30,40};

初始化数组,必须将声明,创建,初始化都放在一条语句中个,分开会产生语法错误。

二、一维数组

2.1、一维数组的声明与初始化

正确的方式:

int num;//声明
    num = 10;//初始化
int id = 1001;//声明 + 初始化
int[] ids;//声明
//1.1 静态初始化:数组的初始化和数组元素的赋值操作同时进行
  ids = new int[]{1001,1002,1003,1004};
//1.2动态初始化:数组的初始化和数组元素的赋值操作分开进行
String[] names = new String[5];
int[] arr4 = {1,2,3,4,5};//类型推断

错误的方式:

int[] arr1 = new int[];
int[5] arr2 = new int[5];
int[] arr3 = new int[3]{1,2,3};
2.2、一维数组元素的引用

通过角标的方式调用。

//数组的角标(或索引从0开始的,到数组的长度-1结束。
    names[0] = "王铭";
    names[1] = "王赫";
    names[2] = "张学良";
    names[3] = "孙居龙";
    names[4] = "王宏志";//charAt(0)
2.3、数组的属性:length
System.out.println(names.length);//5
System.out.println(ids.length);

说明:

数组一旦初始化,其长度就是确定的。arr.length

数组长度一旦确定,就不可修改。

2.4、一维数组的遍历
for(int i = 0;i < names.length;i++){
  System.out.println(names[i]);
}
2.5、数组元素的默认初始化值

数组元素是整型:

0 数组元素是浮点型:0.0

数组元素是char型:0或’\u0000’,而非’0’

数组元素是boolean型:false

数组元素是引用数据类型:null

三、二维数组

数组属于引用数据类型数组的元素也可以是引用数据类型

一个一维数组A的元素如果还是一个一维数组类型的,则此数组A称为二维数组。

3.1、二维数组的声明与初始化

正确的方式:

int[] arr = new int[]{1,2,3};//一维数组
    //静态初始化
    int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}};
    //动态初始化1
    String[][] arr2 = new String[3][2];
    //动态初始化2
    String[][] arr3 = new String[3][];
  //也是正确的写法:
    int[] arr4[] = new int[][]{{1,2,3},{4,5,9,10},{6,7,8}};
    int[] arr5[] = {{1,2,3},{4,5},{6,7,8}};//类型推断
3.2、如何调用二维数组元素:
System.out.println(arr1[0][1]);//2
  System.out.println(arr2[1][1]);//null
    
  arr3[1] = new String[4];
  System.out.println(arr3[1][0]);
  System.out.println(arr3[0]);//
3.3、二维数组的属性:
System.out.println(arr4.length);//3
  System.out.println(arr4[0].length);//3
  System.out.println(arr4[1].length);//4
3.4、遍历二维数组元素
for(int i = 0;i < arr4.length;i++){
      
    for(int j = 0;j < arr4[i].length;j++){
        System.out.print(arr4[i][j] + "  ");
      }
      System.out.println();
  }
    
3.5、二维数组元素的默认初始化值

规定:二维数组分为外层数组的元素,内层数组的元素 int[][] arr = new int[4][3];

外层元素:arr[0],arr[1]等 内层元素:arr[0][0],arr[1][2]等 ⑤ 数组元素的默认初始化值

针对于初始化方式一:比如:int[][] arr = new int[4][3]; 外层元素的初始化值为:地址值

内层元素的初始化值为:与一维数组初始化情况相同 针对于初始化方式二:比如:int[][] arr = new int[4][];

外层元素的初始化值为:null 内层元素的初始化值为:不能调用,否则报错。

四、数组算法

了解以上数组的使用之后,我们需要手写出一下问题:

  • 数组的创建与元素赋值:
    杨辉三角(二维数组)、回形数(二维数组)、6个数,1-30之间随机生成且不重复。
  • 针对于数值型的数组:
    最大值、最小值、总和、平均数等
  • 数组的赋值与复制
  • 数组元素的反转
  • 数组中指定元素的查找:搜索、检索
  • 数组的排序算法

五、总结- 为什么数组的索引从0开始?

1、为什么索引是从0开始的,而不是从1开始呢?这是继承了汇编语言的传统,从0开始更利于计算机做二进制的运算和查找。

2、数组长度使用length属性获得,但实际上这个属性只能表示一个一维数组的长度。二维数组length属性呢

3、数组会发生哪些异常呢

相关文章
|
13天前
|
存储 Java 索引
Java快速入门之数组、方法
### Java快速入门之数组与方法简介 #### 一、数组 数组是一种容器,用于存储同种数据类型的多个值。定义数组时需指定数据类型,如`int[]`只能存储整数。数组的初始化分为静态和动态两种: - **静态初始化**:直接指定元素,系统自动计算长度,如`int[] arr = {1, 2, 3};` - **动态初始化**:手动指定长度,系统给定默认值,如`int[] arr = new int[3];` 数组访问通过索引完成,索引从0开始,最大索引为`数组.length - 1`。遍历数组常用`for`循环。常见操作包括求和、找最值、统计特定条件元素等。
|
13天前
|
存储 Java 索引
Java基础(六):数组
Java基础(六):数组
Java基础(六):数组
|
9天前
|
Java 调度 开发者
Java线程池ExecutorService学习和使用
通过学习和使用Java中的 `ExecutorService`,可以显著提升并发编程的效率和代码的可维护性。合理配置线程池参数,结合实际应用场景,可以实现高效、可靠的并发处理。希望本文提供的示例和思路能够帮助开发者深入理解并应用 `ExecutorService`,实现更高效的并发程序。
30 10
|
11天前
|
存储 Java C++
Java数组:静态初始化与动态初始化详解
本文介绍了Java中数组的定义、特点及初始化方式。
43 12
|
11天前
|
Java 数据库连接 数据库
【潜意识Java】深度分析黑马项目《苍穹外卖》在Java学习中的重要性
《苍穹外卖》项目对Java学习至关重要。它涵盖了用户管理、商品查询、订单处理等模块,涉及Spring Boot、MyBatis、Redis等技术栈。
42 4
|
11天前
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
24 4
|
11天前
|
存储 移动开发 算法
【潜意识Java】Java基础教程:从零开始的学习之旅
本文介绍了 Java 编程语言的基础知识,涵盖从简介、程序结构到面向对象编程的核心概念。首先,Java 是一种高级、跨平台的面向对象语言,支持“一次编写,到处运行”。接着,文章详细讲解了 Java 程序的基本结构,包括包声明、导入语句、类声明和 main 方法。随后,深入探讨了基础语法,如数据类型、变量、控制结构、方法和数组。此外,还介绍了面向对象编程的关键概念,例如类与对象、继承和多态。最后,针对常见的编程错误提供了调试技巧,并总结了学习 Java 的重要性和方法。适合初学者逐步掌握 Java 编程。
31 1
|
3月前
|
XML Java 编译器
Java学习十六—掌握注解:让编程更简单
Java 注解(Annotation)是一种特殊的语法结构,可以在代码中嵌入元数据。它们不直接影响代码的运行,但可以通过工具和框架提供额外的信息,帮助在编译、部署或运行时进行处理。
118 43
Java学习十六—掌握注解:让编程更简单
|
2月前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
2月前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。