| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> Java 基础 day 05 -> 正文阅读 |
|
[Java知识库]Java 基础 day 05 |
第1章 数组概述1.1 数组介绍现在假如要统计我们班的学生姓名情况,用前面所学的知识,我们可能需要先声明n多个个变量来分别记住每个学生的姓名,这样做会显得很麻烦,而且容易出错。因此我们可以使用容器进行操作。将所有的数据全部存储到一个容器中,统一操作。 因此,这就引出了一个容器的概念。 容器概念:
Java从容器的角度衍生出了针对数据存储的Java容器:数组。 数组介绍:
1.2 数组的分类前面介绍了,数组就是存放数据类型一致、长度固定的容器,而我们的数据类型又分为基本数据类型和引用数据类型。因此,数组中可以存放一些基本数据类型数据,比如int、long,也可以存放引用数据类型,比如String、类、甚至是数组本身。也就是说,数组里面甚至可以嵌套数组,因此Java数组可以分为一维数组、二维数组、。。。多为数组。 开发中,最常用的还是一维数组以及二维数组。二维数组顾名思义,就是在一维数组中的每一个元素类型又是一个数组(类似之前学习的嵌套for循环)。 第2章 一维数组的基本操作2.1 一维数组的定义数组的定义有三种方式。 1. 方式一
数据类型[] 数组名 = new 数据类型[长度];
定义可以存储6个整数的数组容器,代码如下: int[] array = new int[6]; 2.方式二
数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...};
定义存储1,2,3,4,5,6整数的数组容器。 int[] arr = new int[]{1,2,3,4,5,6}; 3.方式三
数据类型[] 数组名 = {元素1,元素2,元素3...};
定义存储1,2,3,4,5,6整数的数组容器。 int[] arr = {1,2,3,4,5,6};
2.2 数组的基本操作数组是存储一类元素的,有了数组就方便进行元素统一管理,下面介绍一下数组的基本操作。 2.2.1 数组相关概念说明
数组名[索引]
2.2.2 数组基本操作数组创建后,涉及到数组的对应位置元素的初始化、元素的修改、元素的获取。 public static void main(String[] args) { // 定义一个定长数组 int[] array = new int[3]; // 1、元素赋值 array[0]=1; array[1]=2; array[2]=3; // 2、元素修改 array[0]=11; // 3、元素获取 int a=array[0]; // 打印数组,Arrays先了解即可 System.out.println(Arrays.toString(array)); }
2.2.3 数组初始化值介绍在前面章节学习java变量的时候介绍过,定义的变量如果没有初始化赋值是不能使用的,否则编译报错。而今天学习的数组,内部可以存放各种数据类型,如果没有初始化赋值是否会报错呢? public static void main(String[] args) { // 定义一个定长数组 int[] array = new int[3]; System.out.println(array[0]); // 0 } 上面示例结果没有报错,且输出结果为0,测试发现没有初始化赋值的int类型数组每一个位置都有个默认值0。 所以,这里要强调的是数组作为一个引用数据类型,内部可以存放各种类型元素,如果没有进行初始化赋值,都会有一个默认初始化值。 ? 2.3 数组原理分析2.3.1 内存概述内存是计算机中的重要原件,临时存储区域,作用是运行程序。我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的,必须放进内存中才能运行,运行完毕后会清空内存。 Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。 2.3.2 Java虚拟机的内存划分为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。 官方文档地址:https://docs.oracle.com/javase/specs/jvms/se8/html/index.html ? 内存区域说明:
2.3.3 数组在内存中的存储先定义一个普通数组: public static void main(String[] args) { // 定义一个定长数组 int[] array = new int[3]; ? System.out.println(array); ?// [I@15db9742 } 以上方法执行,输出的结果是[I@15db9742,这个是什么呢?是数组在内存中的地址。new出来的内容,都是在堆内存中存储的,而方法中的变量arr保存的是数组的地址,是在本地方法栈中存储的。 ? 2.4 数组常见问题说明初学者在进行数组操作过程中,经常遇到几个特别常见的错误,这里进行总结说明。 2.4.1 数组角标越界异常观察一下代码,运行后会出现什么结果。 public static void main(String[] args) { ? ?int[] arr = {1,2,3}; ? ?System.out.println(arr[3]); } 运行效果: ? 说明:创建数组,赋值3个元素,数组的索引就是0,1,2,没有3索引,因此我们不能访问数组中不存在的索引,程序运行后,将会抛出 2.4.2 空指针异常观察一下代码,运行后会出现什么结果。 public static void main(String[] args) { ? ?int[] arr = {1,2,3}; ? ?arr = null; ? ?System.out.println(arr[0]); } 运行结果: ? 说明: 第3章 二维数组介绍数组除了包括有简单的一维数组还有嵌套的多维数组(类比嵌套for循环),这里我们就对开发中另一个常用的二维数组为例进行多维数组的讲解。 3.1 二维数组的定义二维数组,本质就是在一维数组的基础上,每一个元素又由一个新的数组组成。 ? 1. 方式一
数据类型[][] 数组名字 = new 数据类型[长度][长度];
int[][] array = new int[2][3]; 这种方式只是设定了数组的一维和二维的长度,并没有赋值。 2.方式二
数据类型[][] 数组名字 = new 数据类型[长度][];
int[][] array = new int[2][]; 这种方式在定义的时候只规定了外层的一维数组个数,并未规定内部元素嵌套的二维数组的内容和长度。 3.方式三
数据类型[][] 数组名字 = new 数据类型[][]{{元素1},{元素2}...}; 或者 数据类型[][] 数组名字 = {{元素1},{元素2}...};
int[][] array = new int[][]{{1,2},{3,4}}; int[][] array = {{1,2},{3,4}}; 这种方式在定义的时候,直接对数组进行了初始化赋值。 3.2 二维数组的基本操作二维数组同样,涉及到赋值、修改与获取。 public static void main(String[] args) { // 定义一个指定容量的二维数组 int[][] array = new int[2][3]; // 1、赋值 array[0][0]=0; array[0][1]=1; array[0][2]=2; array[1][0]=3; array[1][1]=4; // 2、修改 array[0][0]=110; // 3、获取 int a=array[0][0]; ? // 打印数组 ? ?System.out.println(Arrays.deepToString(array)); } 第4章 数组练习4.1 数组遍历
public static void main(String[] args) { ? ?int[] arr = { 1, 2, 3, 4, 5}; ? ?System.out.println(arr[0]); ? ?System.out.println(arr[1]); ? ?System.out.println(arr[2]); ? ?System.out.println(arr[3]); ? ?System.out.println(arr[4]); } 以上代码是可以将数组中每个元素全部遍历出来,但是如果数组元素非常多,这种写法肯定不行,因此我们需要改造成循环的写法。数组的索引是 1、普通for循环遍历 public static void main(String[] args) { ? ?int[] arr = { 1, 2, 3, 4, 5 }; ? ?for (int i = 0; i < arr.length; i++) { ? ? ?System.out.println(arr[i]); ? } } 2、增强for循环 public static void main(String[] args) { ? ? ? int[] arr = { 1, 2, 3, 4, 5 }; ? for (int e : arr) { ? System.out.println(e); ? } } 4.2 数组获取最大值
? 示例代码: public static void main(String[] args) { ? ?int[] arr = { 5, 15, 2000, 10000, 100, 4000 }; ? ?//定义变量,保存数组中0索引的元素 ? ?int max = arr[0]; ? ?//遍历数组,取出每个元素 ? ?for (int i = 0; i < arr.length; i++) { ? ? ?//遍历到的元素和变量max比较 ? ? ?//如果数组元素大于max ? ? ?if (arr[i] > max) { ? ? ? ?//max记录住大值 ? ? ? ?max = arr[i]; ? ? } ? } ? ?System.out.println("数组最大值是: " + max); } 4.3 数组冒泡排序
数组排序2种常见的方式:冒泡排序、选择排序。
?实现: ?public static void main(String[] args) { ? 第5章 Arrays数组工具类上一章,我们通过底层原始方式对数组完成了相关的遍历、排序、查找等操作,如果以后还有这种需求,我们再重复编写这种代码就显得比较麻烦,因此,我们可以自己把这些实现封装成一个工具类。鉴于此,Java为了方便开发,也提供了专门针对数组操作的工具类Arrays,这里面提供了很多实用方法,下面对这里一些常用方法进行介绍。 常用Arrays工具类方法介绍:
示例演示: ?? ?public static void main(String[] args) { ?? ??? ?// 2、数组排序 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/17 21:29:17- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |