首页 > 其他分享 >第四章:数组

第四章:数组

时间:2024-01-20 17:11:07浏览次数:20  
标签:初始化 数组 元素 数据类型 数组名 一维 第四章

1. 数组的概述

  • 数组的概念:

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

    • 数组中的概念

      • 数组名
      • 下标(或索引)
      • 元素
      • 数组的长度
  • 数组的特点:

    • 数组本身是引用数据类型​,而数组中的元素可以是任何数据类型​,包括基本数据类型和引用数据类型。
    • 创建数组对象会在内存中开辟一整块连续的空间​。占据的空间的大小,取决于数组的长度和数组中元素的类型。
    • 数组中的元素在内存中是依次紧密排列的,有序的。
    • 数组,一旦初始化完成,其长度就是确定的。数组的长度一旦确定,就不能修改​。
    • 我们可以直接通过下标(或索引)的方式调用指定位置的元素,速度很快。
    • 数组名中引用的是这块连续空间的首地址
  • 数组的分类

    • 按照元素类型分:

      • 基本数据类型元素的数组:每个元素位置存储基本数据类型的值
      • 引用数据类型元素的数组:每个元素位置存储对象(本质是存储对象的首地址)(在面向对象部分讲解)
    • 按照维度分:

      • 一维数组:存储一组数据
      • 二维数组:存储多组数据,相当于二维表,一行代表一组数据,只是这里的二维表每一行长度不要求一样。

2. 一维数组的使用

2.1 一维数组的声明

  • 格式:

    //推荐
    元素的数据类型[] 一维数组的名称;
    
    //不推荐
    元素的数据类型  一维数组名[];
    
  • 数组的声明 ,需要明确:

    • 数组的维度:在Java中数组的符号是[ ],[ ]表示一维,[ ][ ]表示二维。
    • 数组的元素类型:即创建的数组容器可以存储什么数据类型的数据。元素的类型可以是任意的Java的数据类型。例如:int、String、Student等。
    • 数组名:就是代表某个数组的标识符,数组名其实也是变量名,按照变量的命名规范来命名。数组名是个引用数据类型的变量,因为它代表一组数据。

2.2 一维数组的初始化

静态初始化:

  • 如果数组变量的初始化和数组元素的赋值操作同时进行 ,那就称为数组初始化

  • 静态初始化,本质是用静态数据为数组初始化,此时数组的长度由静态数据的个数决定

  • 一维数组声明和静态初始化格式1:

      数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3,...};
      
      或
      
      数据类型[] 数组名;
      数组名 = new 数据类型[]{元素1,元素2,元素3,...};
    
  • new:关键字,创建数组使用的关键字。因为数组本身是引用数据类型,所以要用new创建数组实体。

  • 一维数组声明和静态初始化格式2:

    数据类型[] 数组名 = {元素1,元素2,元素3...};//必须在一个语句中完成,不能分成两个语句写
    

动态初始化:

  • 数组变量的初始化和数组元素的赋值操作分开进行,即为动态初始化。

  • 动态初始化中,只确定了元素的个数(即数组的长度),而元素值此时只是默认值,还并未真正赋自己期望的值。真正期望的数据需要后续单独一个一个赋值。

  • 格式:

    数组存储的元素的数据类型[] 数组名字 = new 数组存储的元素的数据类型[长度];
    
    或
    
    数组存储的数据类型[] 数组名字;
    数组名字 = new 数组存储的数据类型[长度];
    
    
    // 举例:动态初始化的写法
    int[] arr = new int[5];
    
  • [长度]:数组的长度,表示数组容器中可以最多存储多少个元素。

  • 注意:数组有定长特性,长度一旦指定,不可更改。 和水杯道理相同,买了一个2升的水杯,总容量就是2升是固定的。

2.3 一维数组的使用

数组的长度:

  • 数组元素的总个数,即数组的长度
  • 每个数组都有一个属性length指明它的长度 。如:arr.length 指明数组arr的长度(即元素个数)
  • 每个数组都有长度,而且一旦初始化,其长度就是确定,且不可变的

数组元素的引用:数组名[索引或下标]

数组的下标范围:java中数组的小标是从[0] 开始 , 下标范围是[0 , 数组长度 - 1] , 即[0 , 数组名.length - 1]

数组元素下标可以是整形常量或整形表达式

2.4 一维数组的遍历

遍历:将数组中的每个元素分别取出来就是遍历。for循环与数组的遍历是绝配

2.5 数组元素的默认值

数组是引用类型 ,当使用动态初始化方式创建数组时 ,元素只有默认值

public class ArrayTest6 {
	public static void main(String argv[]){
		int a[]= new int[5]; 
		System.out.println(a[3]); //a[3]的默认值为0
	}
} 

image

3. 一维数组内存分析

3.1 Java虚拟机的内存划分

为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。

image

区域名称 作用
虚拟机栈 用于存储正在执行的每个Java方法的局部变量表等。局部变量表存放了编译期可知长度
的各种基本数据类型、对象引用,方法执行完,自动释放。
堆内存 存储对象(包括数组对象),new来创建的,都存储在堆内存。
方法区 存储已被虚拟机加载的类信息、常量、(静态变量)、即时编译器编译后的代码等数据。
本地方法栈 当程序中调用了native的本地方法时,本地方法执行期间的内存区域
程序计数器 程序计数器是CPU中的寄存器,它包含每一个线程下一条要执行的指令的地址

4. 多维数组的使用

声明与初始化

  • 二位数组声明的语法格式:

    //推荐
    元素的数据类型[][] 二维数组的名称;
    
    //不推荐
    元素的数据类型  二维数组名[][];
    //不推荐
    元素的数据类型[]  二维数组名[];
    
  • 静态初始化

    • 格式:int[ ] [ ] arr = new int [ ] [ ] {3 , 8 , 2} , {2 , 7} , {9 , 0 , 1 , 6};

    • 解释:

      定义一个名称为arr的二维数组,二维数组中有三个一维数组

      • 每一个一维数组中具体元素也都已初始化

        • 第一个一维数组 arr[0] = {3,8,2};
        • 第二个一维数组 arr[1] = {2,7};
        • 第三个一维数组 arr[2] = {9,0,1,6};
      • 第三个一维数组的长度表示方式:arr[2].length;

      • 注意特殊写法情况 , int[ ] x , y[ ] ; x 是一维数组 ,y 是二维数组

  • 动态初始化:

    • 格式1 : 规则二维表 ,每一行的列数是想同的

      //(1)确定行数和列数
      元素的数据类型[][] 二维数组名 = new 元素的数据类型[m][n];
      	//其中,m:表示这个二维数组有多少个一维数组。或者说一共二维表有几行
      	//其中,n:表示每一个一维数组的元素有多少个。或者说每一行共有一个单元格
      
      //此时创建完数组,行数、列数确定,而且元素也都有默认值
      
      //(2)再为元素赋新值
      二维数组名[行下标][列下标] = 值;
      
    • 格式2 :不规则 ,每一行的列数不一样

标签:初始化,数组,元素,数据类型,数组名,一维,第四章
From: https://www.cnblogs.com/NorthPoet/p/17976762

相关文章

  • leedcode 删除有序数组中的重复项
    classSolution:#12234defremoveDuplicates(self,nums):nums_len=len(nums)#5ifnums_len==0:returnnums_lenifnums_len==1:returnnums_lenflag=Truei=0whilef......
  • JavaScript数组常用方法
    1、带回调函数的方法当涉及到数组操作时,JavaScript提供了许多有用的方法。下面是对一些常见的数组方法的讲解:forEach:forEach方法用于遍历数组中的每个元素,并对每个元素执行一个回调函数。它没有返回值,仅用于执行操作。例如:constnumbers=[1,2,3,4,5];numbers.forEa......
  • 算法-数组
    1.二分查找(LeetCode704)题目:给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。输入:nums=[-1,0,3,5,9,12],target=9输出:4解释:9出现在nums中并且下标为4......
  • leecode 189. 轮转数组
    Problem:189.轮转数组目录思路解题方法复杂度Code思路vocalO(1)的解法,太强了,完全想不到是咋想到的解题方法三次递归交换,太妙了复杂度时间复杂度:\(O(\frac{3}{2}n)\)空间复杂度:\(O(1)\)CodeclassSolution{public:voidchange(vector<int>&nums,i......
  • 细说JavaScript数组(JavaScript数组详解)
    ![细说JavaScript数组(JavaScript详解)](https://img-blog.csdnimg.cn/direct/1f9f0b9905754c918bfc33f9d7565825.png#pic_center)一、理解数组数组不是一种独立的数据类型,它由对象发展而来,它可以使用对象的诸多方法,但又区别于对象。数组通常用来存储列表等信息,它就像一张电子表......
  • BZOJ1717 Milk Patterns 产奶的模式 (二分+后缀数组+height数组)
    发现这样起标题更能引流(ylg实锤了)题意给定一个长度为\(n\)的数组\(a\),求在\(a\)中出现了至少\(k\)次的最长子串的长度。解法考虑将一个子串拆成两个后缀,即\([l,r]=[l,n]-[r,n]\),发现一个长度为\(x\)的子串\(t\)在\(i,j\)两个位置出现过当且仅当后缀\(i,j\)有......
  • 流式系统:前言到第四章
    原文:StreamingSystems译者:飞龙协议:CCBY-NC-SA4.0前言或:你在这里要做什么?你好,冒险的读者,欢迎来到我们的书!在这一点上,我假设你要么对学习更多关于流处理的奇迹感兴趣,要么希望花几个小时阅读关于雄伟的棕色鳟鱼的荣耀。无论哪种方式,我都向你致敬!也就是说,属于后一种类型的人,......
  • 912.排序数组--堆排序
    1.题目介绍给你一个整数数组nums,请你将该数组升序排列。示例1:输入:nums=[5,2,3,1]输出:[1,2,3,5]示例2:输入:nums=[5,1,1,2,0,0]输出:[0,0,1,1,2,5]2.题解2.1堆排序思路题目给了我们一个vector数组,要使用堆排序,我们首先要创建一个大根堆,再在这个大根堆的基础上对数......
  • nacos 动态刷新 数组对象 List/数组类型、复杂类对象配置
    @Value环境依赖版本SpringCloud是个大前提,不然还是考虑上面方式或者原生接入方案;@NacosPropertySource(dataId="mydata",autoRefreshed=true)同时@RefreshScope方能接收到nacos的push数据。@NacosValue依赖springbootNacos动态刷新基本数据类型很简单,只需要在字段......
  • 对象数组,根据字符串字段,并按默认方式排序
    sort在字符串的默认排序,是按unicode字节码排序的,一般字符串的排序可以通过strA.localeCompare(strB)来完成,但我这里必须要按字符串的默认方式排序。list=list.sort((a,b)=>{varjobA=a.Job;varjobB=b.Job;......