当前位置: 首页 > news >正文

Java数组总结

在这里插入图片描述


这里写目录标题

  • 一、概念
  • 二、几个相关的概念
  • 三、数组的特点
  • 四、复习:变量按照数据类型的分类
  • 五、数组的分类
  • 六、一维数组的使用(6个基本点)
  • 七、数组元素的默认初始值的情况
  • 八、一维数组的内存解析
  • 九、二维数组
  • 十、数组的常用算法
    • 1、数组的最大值、最小值、总和、平均值
    • 2、数组的扩容与缩容
    • 3、数组的反转
  • 十一、数组工具类Arrays的使用
  • 十二、数组中常见的异常

一、概念

是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。
简称:多个数据的组合
Java中的容器:数组、集合框架:在内存中对多个数据的存储。

二、几个相关的概念

数组名
数组的元素(即内部存储的多个元素)
数组的下标、角标、下角标、索引、index(即找到指定数组元素所使用的编号)
数组的长度(即数组容器中存储的元素的个数)

三、数组的特点

数组中的元素在内存中是依次紧密排列的,有序的
数组,属于引用数据类型的变量。数组的元素,既可以是基本数据类型,也可以引用数据类型。
一旦初始化完成,其长度就确定了,并且其长度不可更改。(因为内存原因)

四、复习:变量按照数据类型的分类

基本数据类型:byte \ short \ int \ long ;float \ double ;char \ boolean
引用数据类型:类、数组、接口、枚举、注解、记录

五、数组的分类

按照元素的类型:基本数据类型元素的数组;引用数据类型元素的数组
按照数组的维数来分:一维数组;二维数组;

六、一维数组的使用(6个基本点)

数组的声明和初始化
调用数组的指定元素
数组的属性:length,表示数组的长度
数组的遍历
数组元素的默认初始化值
一维数组的内存解析(难)

package com.atguigu;/*** package:com.atguigu** @Author jimmy-yan* @Create 2024/10/13 10:30*/
public class OneArrayTest {public static void main(String[] args) {//1、变量的声明和初始化int num1 = 10;int num2; //初始化num2 = 20;   //赋值//todo 1.1 声明数组double[] prices;//todo 1.2 静态初始化:数组变量的初始化与数组元素的赋值同时进行prices = new double[]{20, 12, 34.5};//todo 数组的声明和初始化,动态初始化。String[] foods = new String[4];//其他方式int[] arr = {};  //类型推断//todo 2、数组元素的调用//通过角标的方式,获取数组的元素//角标从0 开始,到数组的长度-1结束System.out.println(prices[0]);//System.out.println(prices[4]);  //ArrayIndexOutOfBoundsExceptionfoods[0] = "米";foods[1] = "面";foods[2] = "油";foods[3] = "肉";//foods[4]="菜";  //ArrayIndexOutOfBoundsException//todo 3、数组的长度:用来描述数组容器中容量的大小//使用length属性表示System.out.println(foods.length);   //4System.out.println(prices.length);  //3//todo 4、如何遍历数组for (int i = 0; i < foods.length; i++) {System.out.println(foods[i]);}}
}

七、数组元素的默认初始值的情况

整型数组元素的默认初始化值:0
浮点型数组元素的默认初始化值:0.0
字符型数组元素的默认初始化值:0(或理解为’\u0000’)
boolean型数组元素的默认初始化值:false
引用数据类型数组元素的默认初始化值:null

八、一维数组的内存解析

Java中的内存结构是如何划分的?(主要关心JvM的运行时内存环境)

将内存区域划分为5个部分:程序计数器、虚拟机栈、本地方法栈、堆、方法区。
与目前数组相关的内存结构: 比如: int[] arr = new int[]{1,2,3};
栈:用于存放方法中声明的变量。比如:arr
堆:用于存放数组的实体(即数组中的所有元素)。比如:1,2,3

在这里插入图片描述
在这里插入图片描述

九、二维数组

数组的声明和初始化
int[][] arr = new int[][]{{1, 2, 3}, {4, 5, 6}, {6, 7, 8}};
动态初始化1
int[][] arr1 = new int[3][3];
动态初始化2
int[][] arr2 = new int[3][];

package com.atguigu;/*** package:com.atguigu** @Author jimmy-yan* @Create 2024/10/13 18:56*/public class TwoArrayTest {public static void main(String[] args) {//1、数组的声明和初始化int[][] arr = new int[][]{{1, 2, 3}, {4, 5, 6}, {6, 7, 8}};//2、动态初始化1int[][] arr1 = new int[3][3];//2、动态初始化2int[][] arr2 = new int[3][];//3、数组元素的调用//针对arr来说,外层元素{1,2,3},{4,5,6},{6,7,8};内层元素1,2,3,4,5,6,6,7,8System.out.println(arr[0][1]);  //2System.out.println(arr[0]);      //[I@5594a1b5arr1[0][1] = 8;System.out.println(arr1[0][1]);  //8System.out.println(arr1[0]);  //[I@6a5fc7f7//数组的长度System.out.println(arr1.length);  //3System.out.println(arr1[0].length);  //3//数组遍历for (int i = 0; i < arr.length; i++) {for (int j = 0; j < arr.length; j++) {System.out.print(arr[i][j] + "\t");}System.out.println();}}
}

十、数组的常用算法

1、数组的最大值、最小值、总和、平均值

package com.atguigu;/*** package:com.atguigu** @Author jimmy-yan* @Create 2024/10/13 22:44*/
public class ArrayExer1 {public static void main(String[] args) {//1、动态创建数组int[] arr = new int[10];//2、通过循环给数组进行赋值for (int i = 0 ; i<arr.length;i++){arr[i] = (int)(Math.random()*(99-10+1))+10;}//3、求最大值int max = arr[0];for (int i=0;i<arr.length;i++){if (max<arr[i]){max=arr[i];}}System.out.println("最大值为:"+max);//4、求最小值int min = arr[0];for (int i=0;i<arr.length;i++){if (min>arr[i]){min=arr[i];}}System.out.println("最小值为:"+min);//5、求总和int sum = 0;for (int i=0;i<arr.length;i++){sum+=arr[i];}System.out.println("总和为:"+sum);//6、求平均值int avg=sum/arr.length;System.out.println("平均值为:"+avg);}
}

2、数组的扩容与缩容

package com.atguigu;/*** package:com.atguigu** @Author jimmy-yan* @Create 2024/10/13 23:30*/
public class ArrayExer2 {public static void main(String[] args) {int[] arr = new int[]{1, 2, 3, 4, 5};//todo 扩容1倍容量int[] newArr = new int[arr.length * 2];//将原有的数组中的元素复制到新的数组中for (int i = 0; i < arr.length; i++) {newArr[i] = arr[i];}//将10,20,3添加到新数组newArr[arr.length] = 10;newArr[arr.length + 1] = 20;newArr[arr.length + 2] = 30;//将新数组的地址赋值到旧数组arr = newArr;for (int i = 0; i < arr.length; i++) {System.out.print(arr[i]+"\t");}}
}
package com.atguigu;/*** package:com.atguigu** @Author jimmy-yan* @Create 2024/10/13 23:39*/
public class ArrayExer3 {public static void main(String[] args) {//todo 数组的缩容int [] arr = {1,2,3,4,5,6,7};int deleteIndex = 4;//不新建数组for(int i=deleteIndex;i<arr.length-1;i++){arr[i]=arr[i+1];}arr[arr.length-1]=0;for(int i=0;i<arr.length-1;i++){System.out.print(arr[i]+"\t");}}
}

3、数组的反转

package com.atguigu;/*** package:com.atguigu** @Author jimmy-yan* @Create 2024/10/13 23:18*/
public class ArrayReverse {public static void main(String[] args) {int[] arr = new int[]{1, 2, 3, 4, 5, 6, 7};for (int i = 0; i < (arr.length) / 2; i++) {int temp = arr[i];arr[i] = arr[arr.length - 1 - i];arr[arr.length - 1 - i] = temp;}for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + "\t");}}
}

十一、数组工具类Arrays的使用

equals:比较两个数组的元素是否依次相等

System.out.println(arr1 == arr2); 比较的是地址是否相等

int[] arr1 = new int[]{1, 2, 3, 4, 5};
int[] arr2 = new int[]{1, 2, 3, 4, 5};
System.out.println(arr1 == arr2);  //比较的是地址 false

toString:输出数组的值

直接打印数组,则输出的是数组的地址
System.out.println(arr1); //[I@6a5fc7f7

int[] arr1 = new int[]{1, 2, 3, 4, 5};
System.out.println(arr1);  //[I@6a5fc7f7

sort:排序
binarySearch:查找

  • 只要返回的是负数就算没有找到

fill:填充

package com.atguigu;import java.util.Arrays;/*** package:com.atguigu** @Author jimmy-yan* @Create 2024/10/14 9:27*/
public class ArraysUtils {public static void main(String[] args) {//1、boolean equals(int[] a,int[] b):比较两个数组的元素是否依次相等int[] arr1 = new int[]{1, 2, 3, 4, 5};int[] arr2 = new int[]{1, 2, 3, 4, 5};System.out.println(arr1 == arr2);  //比较的是地址 falseboolean isEquals = Arrays.equals(arr1, arr2);System.out.println(isEquals);   //比较的是值 true//2、输出数组的值System.out.println(Arrays.toString(arr1));  //[1, 2, 3, 4, 5]//3、填充Arrays.fill(arr1, 10);System.out.println(Arrays.toString(arr1));  //[10, 10, 10, 10, 10]//4、排序int[] arr3 = new int[]{10, 5, 7, 3, 7};Arrays.sort(arr3);System.out.println(Arrays.toString(arr3));//5、查找,前提数组必须是有序的int[] arr4 = new int[]{2, 4, 5, 6, 7, 9};int index = Arrays.binarySearch(arr4, 5);System.out.println(index);   //2int index1 = Arrays.binarySearch(arr4, 8);System.out.println(index1);  //-6,只要返回的是负数就算没有找到}
}

十二、数组中常见的异常

数组角标越界异常:ArrayIndexOutOfBoundsException
空指针异常:NullPointerException

package com.atguigu;import java.util.Arrays;/*** package:com.atguigu** @Author jimmy-yan* @Create 2024/10/14 9:27*/
public class ArraysUtils {public static void main(String[] args) {//todo 数组角标越界异常:ArrayIndexOutOfBoundsExceptionint[] arr = new int[10];
//        System.out.println(arr[10]);  //ArrayIndexOutOfBoundsException
//        System.out.println(arr[-1]);  //todo ArrayIndexOutOfBoundsException   python可以使用负索引//todo 空指针异常:NullPointerException//情况1:
//        int[] arr5 = new int[10];
//        arr1=null;
//        System.out.println(arr1[0]);  //NullPointerException}
}

http://www.mrgr.cn/news/49857.html

相关文章:

  • LEETCODE 49场周赛 第K大完美二叉子树的大小
  • 消息人士称NVIDIA GeForce RTX 5090 GPU的价格不会与4090差距很大
  • 【React】React17+配置Babel实现无需导入React就可以使用jsx
  • 10个常用的大模型提示语式
  • 【MATLAB代码】TDOA最小二乘求三维下的位置(1主锚点、3副锚点)
  • IEC104规约的秘密之十一----扩展报文之文件传输
  • 沃尔玛死磕电商,上半年在线杂货业务增长强劲,Walmart沃尔玛产品采集上架刊登工具
  • OpenFeign中GET与POST请求的参数传递技巧
  • GC5931 在工业风扇中的应用分析且可替代A5931/Alegro
  • 如何在cmd中打开指定文件夹路径(三种方法)
  • 数据结构与算法实验7——查找表
  • RHEL: rpm2cpio: signature hdr data: BAD, no. of bytes(19987) out of range
  • 手机屏幕上的OCR识别方案
  • 全面掌控AI大模型:从理论到实践的完整学习路线,看这篇就够了
  • Redis登录校验
  • OpenAI终于open了,Swarm开源来袭!【视频教材+源码】
  • 读书笔记:《Redis设计与实现》之集群
  • 2024全面大模型学习指南
  • Qt在iOS平台上的编译配置与打包发布,详细流程
  • 哪个牌子的护眼台灯防蓝光效果好?五款对孩子比较好的护眼台灯