Java基础语法之数组

  💕十年生死两茫茫,不思量,自难忘💕

作者:Mylvzi 

 文章主要内容:Java学习之--数组 

 

一.数组的基本概念

1.定义

 数组是相同数据类型的集合!使用数组来存放多个相同类型的数据!

2.Java中定义数组的方式

        // 通过new关键字定义一个数组int[] arr1= new int[10];int[] arr2 = {1,2,3,4,5};

注意:Java中定义数组的方式和C语言不同,Java中将数组名放在最后,前面是数组类型,这样定义更符合利用数据类型定义变量的方法!

3.Java中如果不给数组赋初始值,系统会自动赋默认值

如果是引用类型会赋值为null

4.再次深入理解引用类型!

        数组是一种引用类型,数组名就是通过引用类型创建的引用变量!引用变量存在于栈区,存放的是数组的地址!而数组本身是在堆上开辟的!下面通过两个代码来详细讲解!

   public static void func(int[] a) {a[0] = 10;System.out.println("a[0] = " + a[0]);// 输出10}public static void main(String[] args) {int[] arr = {1, 2, 3};func(arr);System.out.println("arr[0] = " + arr[0]);// 输出10
}

 

    public static void func() {int[] array1 = new int[3];array1[0] = 10;array1[1] = 20;array1[2] = 30;int[] array2 = new int[]{1,2,3,4,5};array2[0] = 100;array2[1] = 200;array1 = array2;array1[2] = 300;array1[3] = 400;array2[4] = 500;for (int i = 0; i < array2.length; i++) {System.out.println(array2[i]);// 输出100 200 300 400 500}}

 

对象一定是在堆上的!但引用变量不一定在栈上 

 

二.数组的基本操作

1.自动获得数组长度

        // 利用数组方法获取长度int[] arr1 = new int[10];System.out.println(arr1.length);// 输出10char[] arr2 = new char[8];System.out.println(arr2.length);// 输出8

 2.for循环遍历数组(两种方式)

        // for循环打印数组int[] arr1 = {1,2,3,4,5};for (int i = 0; i <arr1.length ; i++) {System.out.println(arr1[i]);}// foreach循环打印数组-->也被称为加强for循环// 只能打印数组,无法拿到下标for (int x:arr1) {System.out.println(x);}

3.Arrays方法之将数组以字符串的形式输出 

Arrays方法是Java中重要的一种方法,用来对数组进行操作!

        // Arrays.toString以字符串的形式打印数组int[] arr1 = {1,2,3,4,5};char[] arr2 = {'a','b','c'};String[] arr3 = {"hello world!"};System.out.println(Arrays.toString(arr1));System.out.println(Arrays.toString(arr2));System.out.println(Arrays.toString(arr3));

4.Arrays方法之数组的拷贝 

 // 数组的复制int[] arr1 = new int[10];//原数组   新数组的长度int[] arr2 = Arrays.copyOf(arr1,arr1.length);int[] arr3 = Arrays.copyOf(arr1,arr1.length*2);System.out.println(Arrays.toString(arr1));System.out.println(Arrays.toString(arr2));System.out.println(Arrays.toString(arr3));

 

注意:还可以利用数组的拷贝实现对原数组的增删数据

        // 可以利用数组的复制实现对原数组增删数据int[] arr1 = {1,2,3,4,5};System.out.println(Arrays.toString(arr1));arr1 = Arrays.copyOf(arr1,arr1.length-1);// 删除原数组最后一个元素System.out.println(Arrays.toString(arr1));int[] arr2 = {1,2,3,4,5};arr2 = Arrays.copyOf(arr2,arr2.length+1);// 为原数组增添一个元素System.out.println(Arrays.toString(arr2));

 

还有一种简单的复制数组的方法arr.clone

        int[] arr1 = {1,2,3,4,5};int[] arr2 =arr1.clone();System.out.println("复制后的数组:"+Arrays.toString(arr2));// 输出:1 2 3 4 5

5.判断两个数组是否相等

        int[] arr1 = {1,2,3,4,5};int[] arr2 =arr1.clone();// 调用方法boolean isEqual = Arrays.equals(arr1,arr2);System.out.println(isEqual);// 输出true

6.判断数组是否为空

        int[] arr1 = {1,2,3,4,5};int[] arr2 =arr1.clone();// 判断是否为空boolean isEmpty = arr1.length == 0;// 类似于三目运算符的逻辑System.out.println(isEmpty);

 7.填充数字

        int[] arr1 = new int[10];// 填充数组Arrays.fill(arr1,5);System.out.println(Arrays.toString(arr1));

在指定范围内填充 

 ​​​​​​​​​​​​​​​​​​​​​Java中的from to是左闭右开

 

8.对数组进行升序排序

        int[] arr = {23,14,999,33,1};// 对原数组进行升序排序Arrays.sort(arr);System.out.println(Arrays.toString(arr));// 输出:1  14  23  33  999

9.二分查找!

        int[] arr = {23,14,999,33,1};// 注意二分查找只适用于有序数组Arrays.sort(arr);int i = Arrays.binarySearch(arr,999);System.out.println(i);// 输出4

10.作为函数的返回值!!!

  C语言中数组无法作为函数的返回值,而Java中可以返回数组;

以斐波那契数列为例 

    // 返回数组的函数public static int[] fib(int x) {int[] arr = new int[x];arr[0] = arr[1] = 1;for (int i = 2; i <x ; i++) {arr[i] = arr[i-1] +arr[i-2];}return arr;}public static void main(String[] args) {int[] arr= fib(10);System.out.println(Arrays.toString(arr));

三.二维数组

1.二维数组的初始化 

注意在Java中不能省略行数,列数可以省略(和C语言相反)

        int[][] arr1 = new int[10][];int[][] arr2 = new int[][10];// err  java中二维数组的列不能省去行int[][] arr3 = {{1,2,3},{2,3,4},{3,4,5}};

2.二维数组的打印

  二维数组是一维数组的数组,从这个方面理解可以获取它的行数和列数 

        int[][] arr1 = {{1,2,3},{2,3,4}};// 定义一个两行三列的二维数组for (int i = 0; i < arr1.length ; i++) {// 二维数组名.length代表行数for (int j = 0; j <arr1[0].length ; j++) {// 二维数组第一个元素的长度代表列数System.out.print(arr1[i][j]);}System.out.println();}

 

再看一个代码:

 

总结:

1. 二维数组名.length代表行数

2.一维数组的元素个数就是二维数组的列数

2.不等长数组

  因为Java中行数必须指定,而列数可以不指定,也就是每一列的列数不确定,故而可以设置不等长的二维数组

 

四.总结

  数组是一种常用的引用类型,主要用于存储多个相同类型的数据;在Java中提供了很多与数组相关的包,类,方法如Arrays,要多去了解这些方法,会大大提高开发效率;同时,要深入理解二维数组是一维数组的数组,如何获取行数和列数,要注意和C语言中二维数组的差别! 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/109221.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JAVA】String类

作者主页&#xff1a;paper jie_的博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《JAVASE语法系列》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和…

c++ 中的函数指针

以下图片演示了c中函数指针的用法。如下图可见&#xff0c;把函数地址赋值给函数指针&#xff0c;用函数名或者函数名的地址&#xff0c;都可以&#xff0c;c编译器不报错。即 ptr f 和 ptr &f 都对。但准确的话&#xff0c;函数名就是地址&#xff0c;在编译时候&#x…

学Python的漫画漫步进阶 -- 第二步

学Python的漫画漫步进阶 -- 第二步 二、编程基础那点事2.1 标识符2.2 关键字2.3 变量2.4 语句2.5 代码注释2.6 模块2.7 动动手——实现两个模块间的代码元素访问2.8 练一练2.9 标识符的总结全部16步完成后 &#xff0c;后续就是介绍项目实战&#xff0c;请大家给予点赞、关注&a…

9.14 C++作业

仿照vector手动实现自己的myVector&#xff0c;最主要实现二倍扩容功能 #include <iostream>using namespace std;template <typename T> class Myvector {T *data; //存储数据的数组int len; //当前数组的长度int mycapa; //容纳数据的总容量public://…

第一届电子纸产业创新应用论坛

自从2004年索尼推出全球首款电子纸的应用产品——电纸书阅读器以来&#xff0c;20年间&#xff0c;在各个领域&#xff0c;涌现出众多优秀的电子纸的创新应用&#xff0c;如电子价签、手写本、手机、笔记本、显示器、电子公交站牌等&#xff0c;形成电子纸产业持续蓬勃发展的强…

C语言——指针进阶(三)

目录 一.前言摘要 二.排序函数qsort的模拟实现 三.指针和数组笔试题解析 一.前言摘要 讲述关于strlen和sizeof对于各种数组与指针的计算规则与用法。另外还有qsort函数的模拟实现&#xff08;可以排序任意类型变量&#xff09; 二.排序函数qsort的模拟实现 目标&#xff1a;…

Markdown 字体变红色,2种办法

老读者都知道王哥是 10 年 markdown 专家&#xff0c;今天教大家如何搞定字体颜色通用技巧 文章目录 方案一效果 方案二效果 颜色参考表 方案一 HEML 代码&#xff1a; <font colorred> 学技术&#xff0c;到 JavaPub </font>或者 <font colorFF0000> 学技术…

vue路由配置

目录 路由作用 功能引入 一级路由 二级路由的配置 路由作用 根据 url 锚点路径&#xff0c;在容器中加载不同的模块&#xff0c;本质作用是做页面导航 原理&#xff1a; 利用锚点完成切换页面不会刷新 功能引入 官网&#xff1a;https://router.vuejs.org/zh/下载&…

2023Web前端面试题及答案(一)

答案仅供参考&#xff0c;每人的理解不一样。 文章目录 1、简单说一说事件流原理 事件流: &#xff08;1&#xff09;事件流是指页面 接收事件的顺序; &#xff08;2&#xff09;假设页面中的元素都具备相同的事件,并且这些个元素之间是相互嵌套的 关系. &#xff08;3&#xf…

获取dateTimePicker的数值

运行结果如下图 设置为时间模式 private void Form1_Load(object sender, EventArgs e){dateTimePicker1.Value System.DateTime.Now;dateTimePicker1.Format DateTimePickerFormat.Time;dateTimePicker1.ShowUpDown true;}获取代码 private void button2_Click(object se…

怎么裁剪图片?总结了下面几个方法

怎么裁剪图片&#xff1f;在日常的生活中&#xff0c;图片已经成为了我们不可或缺的一部分。或许你正在整理自己的相册时&#xff0c;或者我们需要向互联网上发布一些图片的时候&#xff0c;总之我们随时都可能会遇到一张需要进行裁剪的图片。比如说&#xff0c;一些图片上存在…

lenovo联想Legion Y9000P IRX8H 2023款(82WQ)原装出厂Windows11系统

联想拯救者笔记本电脑原厂系统自带网卡、显卡、声卡等所有驱动、出厂主题壁纸、Office办公软件、联想电脑管家等预装程序 链接&#xff1a;https://pan.baidu.com/s/1YBji_oh7xOkq-NxnS8Mm8g?pwdn17o 提取码&#xff1a;n17o 所需要工具&#xff1a;16G或以上的U盘 文件…