Java数组(一)


一、一维数组的使用

1. 数组的概述

 * 1. 是数据结构中的一个概念,在数据结构中,叫做:顺序表。在Java中体现为:数组* 2.数组,即为多个相同数据类型的数据按照一定顺序的组合。并使用一个变量进行统一的命名。* * 3.几个相关的概念* > 数组名* > 数组的元素* > 数组的索引(数组的下标、角标)* > 数组的长度* * 4.回忆:变量按照数据类型的分类:基本数据类型  (8种) 、 引用数据类型(类、数组、接口)*  > 数组,属于引用数据类型的变量;数组的元素,可以是基本数据类型,也可以是引用数据类型*  > 数组,不管是静态初始化,还是动态初始化,一旦初始化完成,其长度就是确定的!*  > 数组中的元素,都是依次紧密排列的。*  > 数组,一旦初始化,其长度就不可变。* * 5.数组的分类:*     >按照数组的元素的类型分:基本数据类型元素的数组 、 引用数据类型元素的数组*  >按照数组的维数来分:一维数组、二维数组、。。。。

2.数组的初始化

     //1.1 数组的静态初始化:数组赋值操作与数组元素的赋值操作同时进行int[] scores = new int[]{45,56,87,77};//声明+初始化//1.2数组的动态初始化:数组赋值操作与数组元素的赋值操作分开进行String[] names = new String[5];//此外,正确的情况:String foods[] = new String[10];int[] sorts = {45,56,87,77}; //类型推断//错误的://float[] f1 = new float[4]{1.2f,3.3f,3.4f,5.4f};//float[5] f2 = new float[5];//float[] f3 = new float[];

3. 数组元素的调用

     //如何调用指定的数组元素:通过索引(或角标)的方式。//数组的索引从0开始,到数组的长度 - 1结束System.out.println(scores[0]);System.out.println(scores[3]);names[0] = "郭富城";names[1] = "黎明";//names[2] = 123;//编译不通过System.out.println(names[0]);

4. 数组的长度

     //数组的长度:数组中元素的个数//使用length属性来获取数组的长度System.out.println(scores.length);System.out.println(names.length);

5. 遍历数组元素

for(int i = 0;i < scores.length;i++){System.out.println(scores[i]);}
//说明:
//如果遍历的元素的角标超出了数组的长度范围,则会报异常:ArrayIndexOutOfBoundsException

6. 数组元素的默认值

>数组元素的默认初始化值(在数组动态初始化之后,没有显式给数组元素赋值情况下的默认值)*        >整型的数组:byte\short\int\long 型数组的元素的默认值为: 0*         >浮点型的数组:float\double 型数组的元素的默认值为:0.0*      >布尔型的数组:boolean 型数组的元素的默认值为:false*         >字符型的数组:char 型数组的元素的默认值为:0或\u0000* *       >引用数据类型的数组:数组的元素的默认值为:null

7. 一维数组的内存解析

Java内存的简图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nxuaR52S-1584873584545)(day06笔记.assets/1582266181637.png)]

Java内存结构的完整图

练习

8.课后练习

练习1:

/** * 升景坊单间短期出租4个月,550元/月(水电煤公摊,网费35元/月),空调、卫生间、厨房齐全。屋内均是IT行业人士,喜欢安静。* * 所以要求来租者最好是同行或者刚毕业的年轻人,爱干净、安静。* */
public class ArrayTest {public static void main(String[] args) {int[] arr = new int[] { 8, 2, 1, 0, 3 };int[] index = new int[] { 2, 0, 3, 2, 4, 0, 1, 3, 2, 3, 3 };String tel = "";for (int i = 0; i < index.length; i++) {int value = index[i];tel += arr[value];}System.out.println("联系方式:" + tel);//18...}
}

练习2:

/** 从键盘读入学生成绩,找出最高分,并输出学生成绩等级。成绩>=最高分-10    等级为’A’   成绩>=最高分-20    等级为’B’成绩>=最高分-30    等级为’C’   其余                        等级为’D’提示:先读入学生人数,根据人数创建int数组,存放学生成绩。* */
public class ArrayTest1 {public static void main(String[] args) {//1.实例化ScannerScanner scan = new Scanner(System.in);//2.根据提示,从键盘输入学生人数System.out.println("请输入学生人数:");int count = scan.nextInt();//3.根据学生人数,创建相应的数组。使用动态初始化int[] scores = new int[count];//4.通过for循环遍历的方式,给数组元素赋值System.out.println("请输入" + count + "个学生成绩");int maxScore = 0;for(int i = 0;i < scores.length;i++){scores[i] = scan.nextInt();//5.获取数组元素的最大值:maxScore//方式一if(maxScore < scores[i]){maxScore = scores[i];}//方式二://maxScore = (maxScore < scores[i])? scores[i]:maxScore;}//6.遍历数组元素,获取学生的成绩及等级,并输出char grade;for(int i = 0;i < scores.length;i++){if(scores[i] >= maxScore - 10){grade = 'A';}else if(scores[i] >= maxScore - 20){grade = 'B';}else if(scores[i] >= maxScore - 30){grade = 'C';}else{grade = 'D';}System.out.println("student " + i + " score is " + scores[i] + " grade is " + grade);}//scan.close();}}

二、二维数组

1. 二维数组的理解

数组,属于引用数据类型的变量;数组的元素,可以是基本数据类型,也可以是引用数据类型*       ---> 数组的元素,还可以是数组!*            ---->一维数组的元素,如果又是一维数组,则构成二维数组*      --->其实本没有二维数组,只不过是一维数组的元素,又是一个一维数组而已。

2. 初始化

     //二维数组的初始化//静态初始化:数组变量的赋值与数组元素的赋值操作同时进行。int[][] arr1 = new int[][]{{1,2,3},{4,5},{7,8,9,10}};//动态初始化:数组变量的赋值与数组元素的赋值操作分开进行。//方式1:String[][] arr2 = new String[5][10];//方式2:String[][] arr3 = new String[5][];//正确的:String arr4[][] = new String[5][6];String[] arr5[] = new String[5][];//错误的:
//      String[] arr6[] = new String[][6];
//      int[][] arr7 = new int[6][4]{{1,2,3},{4,5},{7,8,9,10}};
//      String[5] arr6[3] = new String[][6];

3. 调用数组元素

     System.out.println(arr1[0][0]);System.out.println(arr1[2][2]);//System.out.println(arr1[0]);

4. 数组的长度

System.out.println(arr2.length);//5
System.out.println(arr1.length);//3
System.out.println(arr2[0].length);//10
System.out.println(arr1[1].length);//2

5. 数组的遍历

for(int i = 0;i < arr1.length;i++){for(int j = 0;j < arr1[i].length;j++){System.out.print(arr1[i][j] + "\t");}System.out.println();}

6. 数组元素的默认值

二维数组元素的默认初始化值(以动态初始化为例说明)*       约定:对于二维数组来说,分为外层元素(比如:arr[0])和内层元素(比如:arr[0][1])* *         情况1:比如:int[][] arr = new int[4][3];* *           > 外层元素默认存储的是:数组的类型和地址值*           > 内层元素,跟一维数组的元素的默认值是一致的。*                 >整型的数组:byte\short\int\long 型数组的元素的默认值为: 0*                 >浮点型的数组:float\double 型数组的元素的默认值为:0.0*              >布尔型的数组:boolean 型数组的元素的默认值为:false*                 >字符型的数组:char 型数组的元素的默认值为:0或\u0000* *               >引用数据类型的数组:数组的元素的默认值为:null*            * *         情况2:比如:int[][] arr = new int[4][];*          >外层元素的默认值为:null*          >内层元素:本身不存在。如果输出的话,报错,异常为:java.lang.NullPointerException*

7. 内存解析

 约定:对于二维数组来说,分为外层元素(比如:arr[0])和内层元素(比如:arr[0][1])情况1:比如:int[][] arr = new int[4][3];> 外层元素默认存储的是:数组的类型和地址值> 内层元素,跟一维数组的元素的默认值是一致的。>整型的数组:byte\short\int\long 型数组的元素的默认值为: 0>浮点型的数组:float\double 型数组的元素的默认值为:0.0>布尔型的数组:boolean 型数组的元素的默认值为:false>字符型的数组:char 型数组的元素的默认值为:0或\u0000>引用数据类型的数组:数组的元素的默认值为:null情况2:比如:int[][] arr = new int[4][];>外层元素的默认值为:null>内层元素:本身不存在。如果输出的话,报错,异常为:java.lang.NullPointerException

三、练习题

练习1:如何遍历如下的二维数组int[][] arr = new int[][]{{1,2,3},{4,5},{6,7,8}};
for(int i = 0;i < arr.length;i++){for(int j = 0;j < arr[i].length;j++){System.out.println(arr[i][j]);}}

练习2:写出一维数组初始化的两种方式

int[] arr = new int[4];//动态初始化int[] arr1 = new int[]{1,2,3};//静态初始化int[] arr2 = {1,2,3};//静态初始化,类型推断

练习3:获取如下arr数组中所有元素的和。

int[][] arr = new int[][]{{3,5,8},{12,9},{7,0,6,4}};
int sum = 0;
for(int i = 0;i <arr.length;i++){for(int j = 0; j < arr[i].length;j++){sum += arr[i][j];}}
System.out.println(sum);//***************************
int[] arr = new int[3][];
arr[0] = new int[]{3,5,8};
//。。。

四、小结

  • 熟悉一维数组、二维数组使用场景

    • 相同数据类型的多个变量、按照一定顺序组织起来,形成一个数组,使用一个变量名进行统一管理。
  • 数组名(或数组的变量名)、索引(角标、下角标、index)、数组的元素

  • 数组是引用类型变量、数组的元素可以是基本数据类型,也可以是引用数据类型

  • 数组的长度:① 一旦初始化,其长度是确定的! ② 其长度不可更改

    int[] arr = new int[10];
    sysout(arr.length);//10arr = new int[15];
  • 数组元素的默认值

    int[] arr = new int[10];
    sysout(arr);//[I@堆空间中数组结构的首地址值
    sysout(arr[0]);//0int[][] arr1 = new int[10][5];
    sysout(arr1);//[[I@堆空间中数组结构的首地址值
    sysout(arr1[0]);//[I@堆空间中数组结构的首地址值
    sysout(arr1[0][1]);//0
    sysout(arr1[0][5]);//ArrayIndexOutOfBoundsExceptionint[][] arr2 = new int[10][];
    sysout(arr2);//[[I@堆空间中数组结构的首地址值
    sysout(arr2[0]);//null
    sysout(arr2[0][1]);//NullPointerException
    sysout(arr2[0][5]);//NullPointerException
    
  • 一维数组、二维数组涉及到的关键内容

    • 数组的初始化:静态初始化、动态初始化
    • 如何访问指定索引位置上的数组元素:通过角标的方式。
      • Java中的索引通常都是从0开始的!比如:数组、集合、字符串等

        • 在跟数据库交互时,涉及到的相关api中的索引从1开始的。
    • 数组的属性:length
    • 数组的遍历
    • 数组元素的默认初始化值
    • 数组的内存解析(难点)

4.Java数组(一)相关推荐

  1. java数组简单介绍以及其方法

    小谈一下java数组 数组是存放数据的容器,有两个特点:元素类型唯一,长度固定. 一维数组声明:类型[] 数组名;类型 数组名[];推荐用前一种. 多维数组声明同样是以上要求. 在数组创建时,要注意一 ...

  2. java 数组 反射_java数组的反射

    java数组的反射,有一个JAVA API类可以运用:java.lang.reflect.Array 具体应用: 1:判断一个对象是否是数组: int arr[] = {1,2,3}; Class c ...

  3. java 2维数据便利_计算机等级考试二级java数组辅导

    数组(array)是相同类型变量的集合,可以使用共同的名字引用它.数组可被定义为任何类型,可以是一维或多维.数组中的一个特别要素是通过下标来访问它.数组提供了一种将有联系的信息分组的便利方法. 注意: ...

  4. (二十六)、Java数组在内存中如何存放与分配

    Java中有两种类型的数组: 基本数据类型数组: 对象数组: 当一个对象使用关键字"new"创建时,会在堆上分配内存空间,然后返回对象的引用,这对数组来说是一样的,因为数组也是一个 ...

  5. (PASS)JAVA数组去重 三种方法 (不用集合)

    第一种方法(只学到数组的看): 定义一个新的数组长度和旧数组的长度一样,存储除去重复数据的旧数组的数据和0, package demo01;import java.sql.Array; import ...

  6. Java数组的基本操作方法整理

    数组是具有相同数据类型的一组数据的集合,Java支持多为数组,一维数组的每个基本单元都是基本数据类型的数据,二维数组就是每个基本单元是一维数组的一维数组,以此类推,n维数组的每个基本单元都是n-1为数 ...

  7. Java数组常见操作

    Java数组常见操作 文章目录 Java数组常见操作 7.0 数组的遍历 1.使用foreach循环访问数组中每个元素. 2.使用简单的for循环(多层循环嵌套)来遍历数组. 7.1 数组长度 7.2 ...

  8. Java 数组转型和范型

    今天写代码遇到一个奇怪的问题,代码结构如下: [java] view plaincopy print? ArrayList<String> list = new ArrayList< ...

  9. 1.1 Java数组简介:数组是什么?

    在某些情况下,虽然可以使用单个变量来存储信息,但是如果需要存储的信息较多(例如存储 50 名学生的成绩),这时再依次创建变量声明并赋值显得非常麻烦. 随着处理的信息量越来越大,工作也就越来越烦琐,这时 ...

  10. java数组可扩展_[转载]Java数组扩容算法及Java对它的应用

    Java数组扩容的原理 1)Java数组对象的大小是固定不变的,数组对象是不可扩容的. 2)利用数组复制方法可以变通的实现数组扩容. 3)System.arraycopy()可以复制数组. 4)Arr ...

最新文章

  1. 度量快速开发平台端口映射的介绍
  2. 获得汉字拼音的首字母
  3. 【EntityFramework Core】实体实例化注入
  4. python进阶:闭包、map/reduce/filter函数、lambda函数、装饰器
  5. IE兼容模式下 SCRIPT1028: 缺少标识符、字符串或数字
  6. assert宏的用法
  7. 查看LINUX当前负载
  8. 北大 AI 公开课 2019 | 颜水成:人工智能行业观察与实践
  9. php+gd库的源码安装
  10. 烧录imx6需要的linux空间,IMX6Q学习笔记——开发板的Linux系统更新和烧录
  11. Java简单输入输出
  12. 计算机直线的绘制实验报告,dda画直线实验报告
  13. Bailian4108 羚羊数量-Number Of Antelope【递推+打表】
  14. Git 基础 —— 配置与日志信息
  15. mysql-proxy负载均衡
  16. IDEA eclipse快捷键大全
  17. 互联网晚报 | 12月10日 星期五 | B站月均活跃UP主达270万人;宝马电动车总销量破百万;苹果市值逼近3万亿美元...
  18. win10系统以太网连接显示“未识别网络”问题的解决
  19. 正睿(比赛--Day10)
  20. 【C++】DISALLOW_COPY_AND_ASSIGN

热门文章

  1. lg android tv遥控器,LG TV Remote遥控器
  2. 向App Store提交二进制文件时报错ERROR ITMS-90096
  3. php私有云盘,教你搭建个人/企业私有云盘-kodexplorer
  4. 激光中心线算法MATLAB仿真
  5. noip模拟测试 主仆见证了 Hobo 的离别
  6. 微信公众号文章采集工具,可采集文章文字内容信息及图片
  7. 电子加速器原理与应用
  8. 浅夏,盈一眸清凉,捻一指馨香
  9. “Unexpected end of JSON input while parsing near···”错误解决方案
  10. 解决:unable to find valid certification path to requested target