1.一维数组内存结构分析

2.一维数组概述

package com.yl.pdfdemo.day02;import java.util.Arrays;
import java.util.Scanner;/*** @Author wfj* @Date 2021/1/21* @Description 数组的使用* @Version 1.0*/public class ArrayTest1 {public static void main(String[] args) {/*** 一:数组概述*1.数组的理解:数组(Array),是多个相同类型的数据按照一定顺序排列的集合,并且使用一个名字命名* 并通过编号的方式对这些数据进行统一管理** 2.数组的相关概念* 》数组名* 》元素* 》角标 、下标 、索引、* 》数组的长度:元素的个数** 3.数组的特点* 1)数组是有序排列的* 2)数组属于引用数据类型变量,数组中的元素可以为任意的数据类型* 3)创建数组对象,会在内存中,开辟出一块连续的空间,而数组名引用的是这块连续空间的首地址* 4)数组的长度一旦确定下来,就不能改变** 4.数组的分类*  1)按照维度来划分:一维数组,二维数组。。。*  2)按照数组元素的类型,基本数据类型元素的数组,引用数据类型元素的数组**  5.一维数组的使用*  1)一维数组的声明和初始化*  2)如何调用数组的指定位置的元素*  3)如何获取数组的长度*  4)如何遍历数组*  5)数组元素的默认初始化值*  6)数组的内存解析****///1.一维数组的声明和初始化int[] ids; //声明//静态初始化:数组的初始化和赋值同时进行ids = new int[]{1001,1002,1003,1004,10005};//也可以这样声明和赋值,注意,这样写,不能分开声明和赋值这两个步骤int ages[] = {18,28,38}; //类型推断//动态初始化:数组的初始化和赋值分开进行String[] names = new String[5];//错误的写法
//        int[] arr1 = new int[];
//        int[5] arr2 = new int[5];
//        int[] arr3 = new int[3]{1,2,3};//注意:数组一旦初始化完成,其长度就确定了//2.如何调用数组指定位置的元素,通过角标的调用方式//数组的角标(索引)从0开始一直到数组长度-1names[0] = "小舞";names[1] = "唐三";names[2] = "宁荣荣";names[3] = "马红俊";names[4] = "比比东";//3.如何获取数组的长度//通过数组的属性lengthSystem.out.println(names.length);//5//4.如何遍历数组for (int i = 0; i < names.length; i ++) {System.out.println(names[i]);}//5.数组元素的默认初始化值int[] arr1 = new int[5];for (int i = 0; i < arr1.length; i++) {System.out.println(arr1[i]);//0}/*** 数组的默认值* 数组元素是整形时:0* 数组元素为浮点型时:0.0* 数组元素为char时:0 或'\u0000'* 数组元素为boolean型时:false* 数组元素为引用数据时:null*///练习1int[] 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++) {tel += arr[index[i]];}System.out.println(tel);//练习2Scanner scanner = new Scanner(System.in);System.out.println("请输入学生个数:");int num = scanner.nextInt();System.out.println("请输入这"+num+"学生的成绩:");int[] scores = new int[num];for (int i = 0; i < scores.length; i++) {scores[i] = scanner.nextInt();}int max = 0;//求最大值for (int i = 0; i < scores.length; i++) {if (scores[i] > max) {max = scores[i];}}char c;for (int i = 0; i < scores.length; i++) {if (max - scores[i] <= 10) {c = 'A';} else if (max - scores[i] <= 20){c = 'B';} else if (max - scores[i] <= 30) {c = 'C';} else {c = 'D';}System.out.println("学生"+i+"的成绩是"+scores[i]+",级别是"+c);}//练习3/*** 定义一个长度为10的数组,元素为随机的不可以重复的两位数[10,99]* 求这个数组的最大值,最小值,平均值和总和*/int[] arrs = new int[10];for (int i = 0; i< arrs.length; i ++) {arrs[i] = (int)(Math.random() * 90 + 10);}// 打印这10个随机数Arrays.stream(arrs).forEach(item -> {System.out.println(item);});int maxnum = 0;int minnum = arrs[0];int sum = 0;int avg = 0;for (int i = 0; i < arrs.length; i++) {if (arrs[i] > maxnum) {maxnum = arrs[i];}}System.out.println("最大值为:" + maxnum);for (int i = 1; i < arrs.length; i++) {if (arrs[i] < minnum) {minnum = arrs[i];}}System.out.println("最小值为:" + minnum);for (int i = 0; i < arrs.length; i++) {sum += arrs[i];}System.out.println("总和为:"+sum);System.out.println("平均值为:"+sum/arrs.length);/*** 关于数组的复制问题*/int[] a,b;a = new int[]{1,2,5,8,19};Arrays.stream(a).forEach(item -> {System.out.println(item);});//注意:这样并不能说是复制数组,事实上,a的地址指向内存的一块空间,// b=a其实就是将a的地址赋值给b,所有两者是指向同一块内存空间的b = a;for (int i = 0; i < b.length; i++) {if (i % 2 == 0) {b[i] = i;}}Arrays.stream(b).forEach(item -> {System.out.print(item + "  ");//02284});Arrays.stream(a).forEach(item -> {System.out.print(item + "  ");//02284});/*** 数组的赋值,反转,查找*///1.复制,strs和strs1这时候指向两个不同的内存区域String[] strs = new String[] {"aa","bb","cc","dd","ee"};String[] strs1 = new String[strs.length];for (int i = 0; i < strs.length; i++) {strs1[i] = strs[i];}//2.反转(方式1)
//        for (int i = 0; i < strs.length/2; i++) {//            String temp = strs[i];
//            strs[i] = strs[strs.length - i -1];
//            strs[strs.length - i - 1] = temp;
//        }//2.反转(方式2)for (int i = 0,j = strs.length-1;i < j; i++,j--) {String temp = strs[i];strs[i] = strs[j];strs[j] = temp;}Arrays.stream(strs).forEach(item -> {System.out.print(item + "  ");});//3.查找(搜索)String s = "cc";for (int i = 0; i < strs.length; i++) {if (s.equals(strs[i])) {System.out.println("找到了目标:"+ s +"其索引为:"+i);break;}}}}

3.二维数组内存结构分析

4.二维数组概述

package com.yl.pdfdemo.day02;/*** @Author wfj* @Date 2021/1/21* @Description 二维数组* @Version 1.0*/public class ArrayTest2 {public static void main(String[] args) {/*** 理解:* 对于二维数组的理解,我们可以看成是一维数组array1又作为另外一个一维数组array2的元素的存在* 其实,从数组底层的运行机制来看,其实没有多维数组** 1.二维数组的使用*  1)二维数组的声明和初始化*  2)如何调用数组的指定位置的元素*  3)如何获取数组的长度*  4)如何遍历数组*  5)数组元素的默认初始化值*  6)数组的内存解析*///1.二维数组的声明和初始化int[] arr = new int[]{1,2,3};//一维数组//静态初始化int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7}};//或者int[] arr11[] = new int[][]{{1,2,3},{4,5},{6,7,8}};int[] arr12[] = {{1,2,3},{4,5},{6,7,8}};//动态初始化1,相当于一个表格,3行2列String[][] arr2 = new String[3][2];//动态初始化2String[] arr3[] = new String[3][];//相当于建了3行,但是列并没有创建,所以直接引用行不会报错,但是引用列则会报错//错误的写法//String[][] arr4 = new String[][4];//String[4][3] arr5 = new String[][];//  int[][] arr6 = new int[4][3]{{1,2,3},{2,3}};//2.如何调用数组的的指定位置的元素System.out.println(arr1[0][1]);//2System.out.println(arr2[1][1]);//null//System.out.println(arr3[1][0]);//报空指针异常arr3[1] = new String[3];//这里相当于第2行创建3列System.out.println(arr3[1][0]);//nullSystem.out.println(arr3[0]);//null//3、读取数组的长度System.out.println(arr1.length);//3System.out.println(arr1[0].length);//3System.out.println(arr1[1].length);//2System.out.println(arr1[2].length);//2//4、如何遍历二维数组for (int i = 0; i < arr1.length; i++) { //遍历行数for (int j = 0; j < arr1[i].length; j++) { //列内容System.out.print(arr1[i][j]);}System.out.println();}//5.二维数组元素的默认初始化值/*** 初始化1:int[][] arr = new int[3][5]*      外层元素的初始化值:地址值*      内层元素的初始化值:与一维数组的一样* 初始化2:int[][] arr = new int[6][]*      外层元素的初始化值为null*      内层元素的初始化值:不能调用,否则报错*///intint[][] doubleArr = new int[4][3];System.out.println(doubleArr[0]);//[I@30f39991(地址值)System.out.println(doubleArr[0][0]);//0//floatfloat[][] doubleArr1 = new float[4][3];System.out.println(doubleArr1[0]);//[F@452b3a41(地址值)System.out.println(doubleArr1[0][0]);//0.0//StringString[][] doubleArr2 = new String[4][3];System.out.println(doubleArr2[0]);//[Ljava.lang.String;@4a574795(地址值)System.out.println(doubleArr2[0][0]);//nulldouble[][] doubleArr3 = new double[3][];System.out.println(doubleArr3[0]);//null//System.out.println(doubleArr3[0][0]);//报空指针错误//练习1,求二维数组所有值的和int[][] doublearr = new int[][] {{3,5,8},{12,9},{7,10,3,6}};int sum = 0;for (int i = 0; i < doublearr.length; i++) {for (int j = 0; j < doublearr[i].length; j++) {sum += doublearr[i][j];}}System.out.println("总和为:"+sum);//63//二维数组的一些小坑/*** 提示:* 一维数组:int[]x 或者int x[]* 二维数组:int[][] y 或者int [] y [] 或者int y [][]\* 声明:int[] x,y[],在给下x,y变量赋值之后,以下选项允许编译通过的是* 注意:以上声明拆分为int[]x(一维数组) 和int[][]y(二维数组)* 1.x[0] = y;  不可以* 2.y[0] = x;  可以* 3.y[0][0] = x; 不可以* 4.x[0][0] = y;  不可以* 5.y[0][0] = x[0]  可以*  x= y;           不可以*///练习,杨辉三角(打印10行)/***      1*      1   1*      1   2   1*      1   3   3   1*      1   4   6   4   1*      1   5   10  10  5   1*          省略。。**  以上有这么一个规律*  1.每一行的第一个和最后一个元素都是1*  2.从第三行开始,假设我们定义了一个二维数组,int[][]x*      我们可以得出公式: x[i][j] = x[i-1][j-1]+x[i-1][j]        =>[i]等于行 而[j]等于列*      第三行,2 = x[2][1] = x[1][0] + x[1][1] = 1+1**      第四行的,*          3 = x[3][1] = x[2][o] + x[2][1] = 1+2*          3 = x[3][2] = x[2][1] + x[2][2] = 2+1**///初始化二维数组int[][] yang = new int[10][];//给数组的元素赋值for (int i = 0; i < yang.length; i++) {yang[i] = new int[i + 1];//给每一行的首末元素赋值为1yang[i][0] = yang[i][i] = 1;//非首末元素赋值,第三行时,执行yang[i][j] = yang[i-1][j-1] + yang[i-1][j];if (i > 1) {for (int j = 1; j < yang[i].length - 1; j++) {yang[i][j] = yang[i-1][j-1] + yang[i-1][j];}}}//遍历二维数组for (int i = 0 ; i < yang.length; i++) {for (int j = 0; j < yang[i].length; j++) {System.out.print(yang[i][j] + "  ");}System.out.println();}}
}

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. 全球第一家只接收BCH的慈善组织
  2. 内存分配函数 malloc、realloc、calloc
  3. 你了解VLSM多少(1)
  4. 对称密码的编程使用(DES、3DES、AES)
  5. D-Wave的量子计算机,到底能不能进行量子计算?
  6. uC/OS 的任务调度解析
  7. Java网络编程——Socket
  8. 在MySQL中导出sql脚本文件与导入sql脚本文件
  9. 数据科学导论学习小结——其二
  10. 知识图谱——关系抽取
  11. 服务器内存傲腾基本参数信息,单条512GB的傲腾内存你见过嘛?
  12. Allegro PCB导入网表后,PCB规则变化怎么办?
  13. 道高一尺魔高一丈,记强大的boost regex
  14. 渲染算法学习(七)-- Real-Time Ray Tracing
  15. wine 安装(ubuntu中安装windows下软件)
  16. 数字信号处理。 引言
  17. vi 全单词 (whole word) 搜素
  18. 2023年美国大学生数学建模C题:预测Wordle结果建模详解+模型代码(一)
  19. ANSYS Maxwell导出图片的方法
  20. chrome开发者工具_如何使用Chrome开发者工具查找性能瓶颈

热门文章

  1. dma总线全称_DMA总线
  2. 怎么用计算机程序打开文件,win7打开计算机管理出现该文件没有与之关联的程序来执行该操作怎么解决...
  3. 通俗易懂的 Java 线程和进程区别
  4. Linux(b站视频兄弟连)自学笔记第十五章——启动管理
  5. SouthernBiotech小鼠抗Bcl-xL-FITC
  6. 微信小程序的基础知识
  7. 人人网(带有登陆页面的网站爬取)
  8. 欧拉距离,曼哈顿距离与明可夫斯基距离探讨
  9. 【奶奶看了都会】教你用Python 脚本薅京东签到羊毛
  10. VOS的直拨,回拨,半直拨三种业务基本模式是怎样的业务流程,有什么区别?