Java数组详细介绍及相关工具类


Posted in Java/Android onApril 14, 2022

认识数组

数组的定义

数组是相同类型数据的有序集合。数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个元素,每个元素可以通过一个索引(下标)来访问它们。

数组的四个基本特点

  • 长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
  • 其元素的类型必须是相同类型,不允许出现混合类型。
  • 数组类型可以是任何数据类型,包括基本类型和引用类型。
  • 数组有索引的:索引从0开始,到 数组.length-1结束
  • 数组变量属于引用类型,数组也是对象。

PS:数组变量属于引用类型,数组也是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中存储的。

Java数组详细介绍及相关工具类

数组下标从0开始

arr[0] == 12

arr[1] == 6

arr[2] == 27

arr[5] == 43

数组的初始化

数组的初始化方式总共有三种:默认初始化、静态初始化、动态初始化。

默认初始化

数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。

int[] arr = new int[3];  //数组有默认的初始化值

基本数据类型数组的默认值:

byte[] : 0

short[] : 0

cahr[] : ‘\u0000’

int[] : 0

long[] : 0

float[] : 0.0

double[] : 0.0

boolean[] : false

引用数据类型数组的默认值:null

静态初始化

除了用new关键字来产生数组以外,还可以直接在定义数组的同时就为数组元素分配空间并赋值。

int[] arr = {12,23,45};
int[] arr = new int[]{12,23,45};

动态初始化

数组定义与为数组元素分配空间并赋值的操作分开进行。

int[] arr ;
arr = new int[3]
arr[0] = 12;
arr[1] = 23;
arr[2] = 45;

数组有关的问题

数组的遍历

两种方法

public class TestCode04 {
    public static void main(String[] args) {
        int[] arr1 = new int[]{1, 2, 3, 4, 5};
        int[] arr2 = {5, 4, 3, 2, 1};
        //方式1,使用普通for循环
        //arr1.length获取数组长度的方法
        for (int i = 0; i < arr1.length; i++) {
            System.out.print(arr1[i] + " ");
        }
        System.out.println();
        //方式2,使用增强for循环
        for (int a : arr2) {
            System.out.print(a + " ");
        }
    }
}

求最值问题

问题:给定一个数组int[] arr = {3,5,6,17,26,9,0,7}; ,求出数组中最大的数

public class TestCode05 {
    public static void main(String[] args) {
        int[] arr={3,5,6,17,26,9,0,7};
        int max=arr[0];//假设最大元素为数组arr[0]位置上的数
        //然后依次向后比较
        for(int i=1;i<arr.length;i++){
            //因为max=arr[0];可以从arr[1]位置开始比较
            if(arr[i]>max){
                max=arr[i];
            }
        }
        System.out.println(max);
    }
}

查询子元素

查询指定位置元素

给定一个数组,查询索引位置为2上的元素

public class TestCode06 {
    public static void main(String[] args) {
        int[] arr={3,5,6,17,26,9,0,7};
        //直接输出arr[2];
        System.out.println(arr[2]);
        //输出-->6
    }
}

上面代码体现了数组的一个优点:在按照位置查询的时候,直接一步到位,效率非常高

查询指定元素的位置–>找出元素对应的索引

public class TestCode07{
    public static void main(String[] args){
                //查询指定元素的位置-->找出元素对应的索引 
                //给定一个数组:
                int[] arr = {12,34,56,7,3,56};
                //           0  1  2  3 4  5              
                //功能:查询元素12对应的索引:
                int index = -1; //这个初始值只要不是数组的索引即可
                for(int i=0;i<arr.length;i++){
                        if(arr[i]==12){
                                index = i;//只要找到了元素,那么index就变成为i
                                break;//只要找到这个元素,循环就停止
                        }
                }
                if(index!=-1){
                        System.out.println("元素对应的索引:"+index);
                }else{//index==-1
                        System.out.println("查无此数!");
                }
        }
}

Arrays工具类

为了方便我们对数组进行操作,系统提供一个类Arrays,我们将它当做工具类来使用。

下面通过代码演示Arrays类中常用的方法:

Arrays.toString(arr);//对数组进行遍历查看,返回的是一个字符串

Arrays.sort(arr);//对数组进行排序 -->升序

Arrays.copyOf(arr,index);//对数组的复制

Arrays.copyOfRange(arr,startindex,endindex);//区间复制

Arrays.equals(arr1,arr2);//比较两个数组的值是否一样

Arrays.fill(arr,1);//数组填充

import java.util.Arrays;
public class TestCode08{
        public static void main(String[] args){
                //给定一个数组:
                int[] arr = {1,3,7,2,4,8};
                //toString:对数组进行遍历查看的,返回的是一个字符串
                System.out.println(Arrays.toString(arr));
                
                //binarySearch:二分法查找:找出指定数组中的指定元素对应的索引:
                //这个方法的使用前提:一定要查看的是一个有序的数组:
                //sort:排序 -->升序
                Arrays.sort(arr);
                System.out.println(Arrays.toString(arr));
                System.out.println(Arrays.binarySearch(arr,4));
                
                int[] arr2 = {1,3,7,2,4,8};
                //copyOf:完成数组的复制:
                int[] newArr = Arrays.copyOf(arr2,4);
                System.out.println(Arrays.toString(newArr));
                
                //copyOfRange:区间复制:
                int[] newArr2 = Arrays.copyOfRange(arr2,1,4);//[1,4)-->1,2,3位置
                System.out.println(Arrays.toString(newArr2));
                
                //equals:比较两个数组的值是否一样:
                int[] arr3 = {1,3,7,2,4,8};
                int[] arr4 = {1,3,7,2,4,8};
                System.out.println(Arrays.equals(arr3,arr4));//true
                System.out.println(arr3==arr4);//false ==比较左右两侧的值是否相等,比较的是左右的地址值,返回结果一定是false                
                //fill:数组的填充:
                int[] arr5 = {1,3,7,2,4,8};
                Arrays.fill(arr5,10);
                System.out.println(Arrays.toString(arr5));
        }
}

二维数组

本质上全部都是一维数组

二维数组初始方式

  • 静态初始化
int[][] arr = {{1,2},{4,5,6},{4,5,6,7,8,9,9}};
int[][] arr =new int[][] {{1,2},{4,5,6},{4,5,6,7,8,9,9}};
  • 动态初始化
int[][] arr = new int[3][]; //本质上定义了一维数组长度为3,每个“格子”中放入的是一个数组
arr[0] = new int[]{1,2};
arr[1] = new int[]{3,4,5,6};
arr[2] = new int[]{34,45,56};
  • 默认初始化

数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。

int[][] arr=new int[3][3];//定义一个3*3的二维数组,默认值为0

二维数组的遍历

两个for循环

for (int i = 0; i < arr.length; i++) {
            for (int j = 0; i < arr[i].length; j++) {
                System.out.print(arr[i][j] + " ");
            }
            System.out.println();//换行
        }
    }

到此这篇关于Java零基础入门数组的文章就介绍到这了!

Java/Android 相关文章推荐
总结一些Java常用的加密算法
Jun 11 Java/Android
Netty结合Protobuf进行编解码的方法
Jun 26 Java/Android
Java中常用解析工具jackson及fastjson的使用
Jun 28 Java/Android
Java基础之详解HashSet的使用方法
Jun 30 Java/Android
mybatis中sql语句CDATA标签的用法说明
Jun 30 Java/Android
SpringBoot SpringEL表达式的使用
Jul 25 Java/Android
解决persistence.xml配置文件修改存放路径的问题
Feb 24 Java/Android
Android Flutter实现图片滑动切换效果
Apr 07 Java/Android
Android开发 使用文件储存的方式保存QQ密码
Apr 24 Java/Android
Java实现扫雷游戏详细代码讲解
May 25 Java/Android
Android基础入门之dataBinding的简单使用教程
Jun 21 Java/Android
springboot读取resources下文件的方式详解
Jun 21 Java/Android
Java8利用Stream对列表进行去除重复的方法详解
Apr 14 #Java/Android
详解Flutter网络请求Dio库的使用及封装
Apr 14 #Java/Android
详细介绍Java中的CyclicBarrier
Apr 13 #Java/Android
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
Apr 13 #Java/Android
Java的Object类的九种方法
Apr 13 #Java/Android
Java 使用类型为Object的变量指向任意类型的对象
Apr 13 #Java/Android
java中为什么说子类的构造方法默认访问的是父类的无参构造方法
Apr 13 #Java/Android
You might like
深入了解PHP类Class的概念
2012/06/14 PHP
php正则替换处理HTML页面的方法
2015/06/17 PHP
PHP实现批量检测网站是否能够正常打开的方法
2016/08/23 PHP
PHP实现获取第一个中文首字母并进行排序的方法
2017/05/09 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
2020/04/14 PHP
jQuery学习基础知识小结
2010/11/25 Javascript
jquery formValidator插件ajax验证 内容不做任何修改再离开提示错误的bug解决方法
2013/01/04 Javascript
jQuery如何实现点击页面获得当前点击元素的id或其他信息
2014/01/09 Javascript
推荐9款炫酷的基于jquery的页面特效
2014/12/07 Javascript
使用jQueryMobile实现滑动翻页效果的方法
2015/02/04 Javascript
jquery简单实现外部链接用新窗口打开的方法
2015/05/30 Javascript
laydate.js日期时间选择插件
2017/01/04 Javascript
详解从零搭建 vue2 vue-router2 webpack3 工程
2017/11/22 Javascript
解决iview多表头动态更改列元素发生的错误的方法
2018/11/02 Javascript
javascript中的with语句学习笔记及用法
2020/02/17 Javascript
解决vue打包 npm run build-test突然不动了的问题
2020/11/13 Javascript
Python中的hypot()方法使用简介
2015/05/18 Python
在Python的Django框架中编写编译函数
2015/07/20 Python
浅谈Python中重载isinstance继承关系的问题
2018/05/04 Python
Python3.4学习笔记之常用操作符,条件分支和循环用法示例
2019/03/01 Python
Python多版本开发环境管理工具介绍
2019/07/03 Python
在Mac中配置Python虚拟环境过程解析
2020/06/22 Python
webapp字号大小跟随系统字号大小缩放的示例代码
2018/12/26 HTML / CSS
记一次高分屏下canvas模糊问题
2020/02/17 HTML / CSS
意大利团购网站:Groupon意大利
2016/10/11 全球购物
如何将字串String转换成整数int
2015/02/21 面试题
机电一体化求职信
2014/03/10 职场文书
毕业典礼主持词大全
2014/03/26 职场文书
就业协议书的作用
2014/04/11 职场文书
人事行政经理岗位职责
2014/06/18 职场文书
小学秋季运动会报道稿
2014/09/30 职场文书
2014年银行客户经理工作总结
2014/11/12 职场文书
售票员岗位职责
2015/02/15 职场文书
Golang解析JSON对象
2022/04/30 Golang
错误码NET::ERR_CERT_DATE_INVALID证书已过期解决方法?
2022/07/07 数码科技