Java入门------数组

简介: Java入门------数组

一维数组:

数组是指一组类型相同的数据的集合,数组中的每个数据被称作元素,数组可以存放任意类型的元素,但同一个数组存放的元素类型必须一致。


数组的定义:

//方法一:

数据类型 [] 数组名=null;

//方法二:

数据类型 [] 数组名;‘

数据名=new 数据类型[长度];

举例:

int x;//声明一个int[]类型的变量,初始值均为0
x=new int[100];//为数组x分配100个元素空间


打印数组长度:

在Java中,为了方便获得数组的长度,提供了一个length属性,在程序中可以通过“数组名.length”的方式获得数组长度,即元素的个数,需要注意的是,数组索引的最小值是0,最大值是数组长度-1


举例:

public class HelloWorld {
    public static void main(String[] args) {
        int []arr;
        arr=new int [3];
        //输出数组中元素的值
        System.out.println("arr[0]="+arr[0]);
        System.out.println("arr[1]="+arr[1]);
        System.out.println("arr[2]="+arr[2]);
        System.out.println("数组的长度为:"+arr.length);//打印数组长度
    }
}

输出:

arr[0]=0
arr[1]=0
arr[2]=0
数组的长度为:3

数组的默认值:

给数组元素赋初始值:

public class HelloWorld {
    public static void main(String[] args) {
        int []arr;
        arr=new int [3];
        //给数组部分元素赋初始值
        arr[0]=1;
        arr[1]=5;
        System.out.println("arr[0]="+arr[0]);
        System.out.println("arr[1]="+arr[1]);
        System.out.println("arr[2]="+arr[2]);
        System.out.println("数组的长度为:"+arr.length);
    }
}

输出:

arr[0]=1
arr[1]=5
arr[2]=0//未赋值的元素输出默认值
数组的长度为:3

动态初始化与静态初始化:

定义数组时,只指定数组的长度,由系统自动为元素赋初值的方式称作动态初始化,在初始化数组时还有一种方式叫做静态初始化,即为在定义数组的同时就为数组的每个元素赋初值。


具体方法如下:

类型[] 数组名=new 类型[];

类型[] 数组名={元素1,元素2…};

动态初始化即为我们上述所举的实例,这里我们重点说一下静态初始化。


举例:

public class HelloWorld {
    public static void main(String[] args) {
        int []arr={1,2,3};
        System.out.println("arr[0]="+arr[0]);
        System.out.println("arr[1]="+arr[1]);
        System.out.println("arr[2]="+arr[2]);
        System.out.println("数组的长度为:"+arr.length);
    }
}

输出:

arr[0]=1
arr[1]=2
arr[2]=3
数组的长度为:3

注意:不要将int []arr={1,2,3};写成int []x=new int[4]{1,2,3,4};否则编译器会报错,报错原因即为编译器会认为数组限定的元素个数[4]与实际存储的元素{1,2,3,4}个数有可能不一致,存在一定的安全隐患。

数组索引:

索引越界访问:

举例:

public class HelloWorld {
    public static void main(String[] args) {
        int []arr=new int[4];
        System.out.println("arr[4]="+arr[4]);
    }
}

报错内容为:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 4 out of bounds for length 4
  at HelloWorld.main(HelloWorld.java:5)

数组长度为4,最大索引值为4-1,因此当索引值为4时,就出现了越界访问的情况。

索引的对象无效:

在使用变量引用一个数组的时候,变量必须指向一个有效的数组对象,如果变量的值为null,则意味着没有指向任何数组,此时通过该变量访问数组的元素会出现指针异常。


举例;

public class HelloWorld {
    public static void main(String[] args) {
        int []arr=new int[4];
        arr[0]=5;
        System.out.println("arr[0]="+arr[0]);
        arr=null;
        System.out.println("arr[0]="+arr[0]);
    }
}

输出:

arr[0]=5
Exception in thread "main" java.lang.NullPointerException: Cannot load from int array because "arr" is null
  at HelloWorld.main(HelloWorld.java:8)

在将arr置为null之前,数组都可以进行正常的访问,但是将arr置为null之后,再次访问就出现了空指针异常。

数组遍历:

依次访问数组的每个元素称为数组的遍历。

举例:

public class HelloWorld {
    public static void main(String[] args) {
        int []arr={1,2,3,4,5,6};
        for(int i=0;i<arr.length;i++) {
            System.out.print(arr[i]);
        }
    }
}

输出:

123456

数组最值:

public class HelloWorld {
    public static void main(String[] args) {
        int []arr={3,4,7,19,10,2};
       int max=getMax(arr);
       System.out.println("max="+max);
    }
    public static int getMax(int[] arr)//获得数组中元素的最大值
    {
        int max=arr[0];//假设数组的第一个元素为最大值
        for (int x=1;x<arr.length;x++)
        {
            if(arr[x]>max)//依次将数组中的元素和最大值进行比较
            max=arr[x];
        }
        return max;
    }
}

输出如下:

max=19

最小值的查找方法相类似,这里就不过多赘述了。

数组排序-----冒泡排序:

其实在C语言中,常见的排序方法就是冒泡排序,同样,该方法在Java中依然适用。

我们先来回忆一下冒泡排序的步骤:

举例:

public class HelloWorld {
    public static void main(String[] args) {
        int []arr={3,4,17,9,10,2};
        for(int i=0;i<arr.length-1;i++)//索引最大值为数组长度减一
        {
            for(int j=0;j<arr.length-i-1;j++)//每完成一次,比较的数的个数就减一
                if(arr[j]>arr[j+1])
                {
                    //使用中间变量实现数的交换
                    int temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
        }
        for(int i=0;i<arr.length;i++)
        {
            System.out.print(arr[i]);
        }
    }
}

输出:

23491017

二维数组:

二维的定义:

第一种定义方法:

数据类型[][]数组名=new数据类型[行的个数][列的个数]

举例:

int[][]xx=new int[3][4];

上述代码相当于定义了一个3*4的二维数组,即三行四列的二维数组。

如下图所示:

第二种方式:

数据类型[][] 数组名=new int[行的个数][];

和C语言不同的是,Java的行数不可以省略,但C语言是列数不能省略。

举例:

int[][] xx=new int[3][];

上述代码相当于定义了一个三行,但是列数不确定的二维数组。

如下图所示:

第三种方式:

数据类型[][] 数组名={{第0行初始值},{第一行初始值}…{第n行初始值}};

举例:

int [][] xx={{1,2},{3,4,5,6},{7,8,9}};

上述的二维数组arr中定义了三个元素,而这三个元素都是数组。

如下图所示:

二维数组的访问:

其方法也是通过索引的方式,例如访问二维数组第一行第二个元素arr[0][1]

public class HelloWorld {
    public static void main(String[] args) {
        int[][]arr=new int[3][];
        arr[0]=new int[]{1,2,3,5};
        arr[1]=new int[]{0,3,5};
        arr[2]=new int[]{3,9,6,5};
        for(int i=0;i<arr.length;i++)
        {
            for(int j=0;j<arr[i].length;j++)
            {
                System.out.print(arr[i][j]);
            }
            System.out.println("");
        }
    }
}

输出:

1235
035
3965

二维数组的越界访问:

public class HelloWorld {
    public static void main(String[] args) {
        int[][]arr=new int[3][];
        arr[0]=new int[]{1,2,3,5};
        arr[1]=new int[]{0,3,5};
        arr[2]=new int[]{3,9,6,5};
        for(int i=0;i<=arr.length;i++)//索引最大值为数组长度减一
        {
            for(int j=0;j<arr[i].length;j++)
            {
                System.out.print(arr[i][j]);
            }
            System.out.println("");
        }
    }
}

输出:

1235
035
3965
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
  at HelloWorld.main(HelloWorld.java:9)


索引的对象无效:

public class HelloWorld {
    public static void main(String[] args) {
        int[][]arr=new int[3][];
        arr[0]=new int[]{1,2,3,5};
        arr[1]=new int[]{0,3,5};
        arr[2]=new int[]{3,9,6,5};
        for(int i=0;i<arr.length;i++)
        {
            for(int j=0;j<arr[i].length;j++)
            {
                System.out.print(arr[i][j]);
            }
            System.out.println("");
        }
        arr=null;//将数组置空
        for(int i=0;i<arr.length;i++)
        {
            for(int j=0;j<arr[i].length;j++)
            {
                System.out.print(arr[i][j]);
            }
            System.out.println("");
        }
    }
}

输出:

1235
035
3965
//数组置空后无法正常访问
Exception in thread "main" java.lang.NullPointerException: Cannot read the array length because "arr" is null
  at HelloWorld.main(HelloWorld.java:16)
相关文章
|
16天前
|
存储 监控 Java
【Java并发】【线程池】带你从0-1入门线程池
欢迎来到我的技术博客!我是一名热爱编程的开发者,梦想是编写高端CRUD应用。2025年我正在沉淀中,博客更新速度加快,期待与你一起成长。 线程池是一种复用线程资源的机制,通过预先创建一定数量的线程并管理其生命周期,避免频繁创建/销毁线程带来的性能开销。它解决了线程创建成本高、资源耗尽风险、响应速度慢和任务执行缺乏管理等问题。
142 60
【Java并发】【线程池】带你从0-1入门线程池
|
3天前
|
缓存 安全 Java
【Java并发】【synchronized】适合初学者体质入门的synchronized
欢迎来到我的Java线程同步入门指南!我不是外包员工,梦想是写高端CRUD。2025年我正在沉淀中,博客更新速度加快,欢迎点赞、收藏、关注。 本文介绍Java中的`synchronized`关键字,适合初学者。`synchronized`用于确保多个线程访问共享资源时不会发生冲突,避免竞态条件、保证内存可见性、防止原子性破坏及协调多线程有序访问。
45 8
【Java并发】【synchronized】适合初学者体质入门的synchronized
|
4天前
|
存储 监控 Java
《从头开始学java,一天一个知识点》之:数组入门:一维数组的定义与遍历
**你是否也经历过这些崩溃瞬间?** - 看了三天教程,连`i++`和`++i`的区别都说不清 - 面试时被追问&quot;`a==b`和`equals()`的区别&quot;,大脑突然空白 - 写出的代码总是莫名报NPE,却不知道问题出在哪个运算符 这个系列就是为你打造的Java「速效救心丸」!我们承诺:每天1分钟,地铁通勤、午休间隙即可完成学习;直击痛点,只讲高频考点和实际开发中的「坑位」;拒绝臃肿,没有冗长概念堆砌,每篇都有可运行的代码标本。明日预告:《多维数组与常见操作》。 通过实例讲解数组的核心认知、趣味场景应用、企业级开发规范及优化技巧,帮助你快速掌握Java数组的精髓。
53 23
|
2月前
|
存储 Java 索引
Java快速入门之数组、方法
### Java快速入门之数组与方法简介 #### 一、数组 数组是一种容器,用于存储同种数据类型的多个值。定义数组时需指定数据类型,如`int[]`只能存储整数。数组的初始化分为静态和动态两种: - **静态初始化**:直接指定元素,系统自动计算长度,如`int[] arr = {1, 2, 3};` - **动态初始化**:手动指定长度,系统给定默认值,如`int[] arr = new int[3];` 数组访问通过索引完成,索引从0开始,最大索引为`数组.length - 1`。遍历数组常用`for`循环。常见操作包括求和、找最值、统计特定条件元素等。
|
2月前
|
自然语言处理 Java
Java中的字符集编码入门-增补字符(转载)
本文探讨Java对Unicode的支持及其发展历程。文章详细解析了Unicode字符集的结构,包括基本多语言面(BMP)和增补字符的表示方法,以及UTF-16编码中surrogate pair的使用。同时介绍了代码点和代码单元的概念,并解释了UTF-8的编码规则及其兼容性。
118 60
|
2月前
|
存储 Java 索引
Java基础(六):数组
Java基础(六):数组
36 10
Java基础(六):数组
|
2月前
|
存储 Java C++
Java数组:静态初始化与动态初始化详解
本文介绍了Java中数组的定义、特点及初始化方式。
113 12
|
3月前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
121 7
Spring Boot 入门:简化 Java Web 开发的强大工具
|
3月前
|
监控 架构师 Java
Java虚拟机调优的艺术:从入门到精通####
本文作为一篇深入浅出的技术指南,旨在为Java开发者揭示JVM调优的神秘面纱,通过剖析其背后的原理、分享实战经验与最佳实践,引领读者踏上从调优新手到高手的进阶之路。不同于传统的摘要概述,本文将以一场虚拟的对话形式,模拟一位经验丰富的架构师向初学者传授JVM调优的心法,激发学习兴趣,同时概括性地介绍文章将探讨的核心议题——性能监控、垃圾回收优化、内存管理及常见问题解决策略。 ####
|
4月前
|
监控 安全 Java
Java中的多线程编程:从入门到实践####
本文将深入浅出地探讨Java多线程编程的核心概念、应用场景及实践技巧。不同于传统的摘要形式,本文将以一个简短的代码示例作为开篇,直接展示多线程的魅力,随后再详细解析其背后的原理与实现方式,旨在帮助读者快速理解并掌握Java多线程编程的基本技能。 ```java // 简单的多线程示例:创建两个线程,分别打印不同的消息 public class SimpleMultithreading { public static void main(String[] args) { Thread thread1 = new Thread(() -> System.out.prin

热门文章

最新文章