Java的学习笔记(05)数组

简介: 数组01:什么是数组数组是同类型数据的集合数组的下标从0开始数组02:数组的声明和创建首先必须声明数组变量,才能在程序中使用数组。dataType[] arrayRefVar; //首选方法或dataType arrayReVar[];java语言使用new操作符来创建数组,语法如下:dataType[] arrayReVar = new dataType[arraySize];package array;public class ArrayDemo01 { public static void main(String[] args) {

数组01:什么是数组

数组是同类型数据的集合

数组的下标从0开始

数组02:数组的声明和创建

首先必须声明数组变量,才能在程序中使用数组。

dataType[] arrayRefVar;     //首选方法
dataType arrayReVar[];

java语言使用new操作符来创建数组,语法如下:

dataType[] arrayReVar = new dataType[arraySize];
package array;
public class ArrayDemo01 {
    public static void main(String[] args) {
        //变量类型  变量名字 = 变量的值;
        //数组类型
        int[] nums; //首选方法√
        int nums2[];  //不是首选方法
        //new一个数组
        nums = new int[10];  //长度为10的int类型数组;或者说这个数组可以存放10个int类型数据
    }
}


package array;
public class ArrayDemo01 {
    public static void main(String[] args) {
        //变量类型  变量名字 = 变量的值;
        //数组类型
        int[] nums; //首选方法√   声明一个数组
        nums = new int[10];  //创建一个数组
        nums[0]= 1;    //给数组元素中赋值
        nums[1]= 2;
        nums[2]= 3;
        nums[3]= 4;
        nums[4]= 5;
        nums[5]= 6;
        nums[6]= 7;
        nums[7]= 8;
        nums[8]= 9;
        nums[9]= 10;
        //计算所有元素的和
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
            sum = sum + nums[i];
        }
        System.out.println(sum);
    }
}

经典二合一

//        int[] nums; //首选方法√   声明一个数组
//        nums = new int[10];  //创建一个数组
          int[] nums = new int[10];    //经典二合一

获取数组的长度 arraty.length 数组名.length

数组03:三种初始化及内存分析

静态初始化

动态初始化

数组的默认初始化

package array;
public class ArrayDemo02 {
    public static void main(String[] args) {
        //静态初始化: 创建+赋值
        int[]a = {1,2,3,4,5,6,7,8,9};
        Man[] men = {new Man(1,1),new Man(2,2)};
        //动态初始化:包含默认初始化
        int[]b = new int[10];
    }
}

数组04:下标越界及小结

数组一旦被创建,长度大小不可改变。

数组元素必须是相同类型,不允许出现混合类型。

数组元素可以是任何数据类型,包括基本类型和引用类型。

数组属于引用类型,数组也可以看作是对象,数组的每个元素相当于该对象的成员变量。

数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的

数组05:数组的使用

package array;
public class ArrayDemo03 {
    public static void main(String[] args) {
        int[] arrsys = {1,2,3,4,5};
        for (int i = 0; i < args.length ; i++) {
            System.out.println(arrsys[i]);
        }
        int sum = 0;
        for (int i = 0; i < arrsys.length; i++) {
            sum +=arrsys[i];
        }
        System.out.println("sum=" + sum);
        int max =arrsys[0];
        for (int i = 0; i < arrsys.length; i++) {
            if (arrsys[i]>max){
                max=arrsys[i];
            }
        }
        System.out.println("max=" + max);
    }
}
package array;
public class ArrayDemo04 {
    public static void main(String[] args) {
        int[] arrays = {1,2,3,4,5};
        //直接for循环,无下标
        for (int array : arrays){
            System.out.println(array);
        }
        printArrsy(arrays);
        System.out.println( );
        System.out.println("========================");
        int[] reverse = reverse(arrays);
        printArrsy(reverse);
    }
    //打印数组元素
    public static void printArrsy(int[] arrays){
        for(int i = 0; i<arrays.length;i++){
            System.out.print(arrays[i]+" ");
        }
    }
    //反转数组
    public static int[] reverse(int[] arrays){
        int[] result = new int[arrays.length];        
        //反转操作
        for (int i = 0,j = result.length-1; i < arrays.length; i++,j--) {
            result[j] = arrays[i];
        }
        return result;
    }
}

数组06:二维数组、多维数组

package array;
public class ArratDemo05 {
    public static void main(String[] args) {
        int[][] array = {{1,2},{2,3},{3,4},{4,5}};
        /**
         * array[0][0] = 1    array[0][1] = 2   {1,2}
         * array[1][0] = 2    array[1][1] = 3   {2,3}
         */
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.println(array[i][j]);
            }
        }
    }
}

数组07:Arrays类讲解

数组的工具类 java.util.Arrays

package array;
import java.lang.reflect.Array;
import java.util.Arrays;
public class ArrayDemo06 {
    public static void main(String[] args) {
        int[] array = {1,2,36565,895645,5648754,87,68,12,3};
        System.out.println(Arrays.toString(array));     //打印数组全部内容
        Arrays.sort(array);                            //数组排序,从小到大
        System.out.println(Arrays.toString(array));
        Arrays.fill(array,0);
        System.out.println(Arrays.toString(array));
    }
}

查看JDK帮助文档,知道具体方法。

  1. 给数组赋值 fill方法
  2. 对数组排序 sort方法
  3. 比较数组 equals方法
  4. 查找数组元素 binarySearch方法(能对排序好的数组进行二分查找)

数组08:冒泡排序

八大排序算法之一

package array;
import java.util.Arrays;
public class ArrayDemo07 {
    public static void main(String[] args) {
        //冒泡排序
        int[] a = {1,3,6,2,9,8,0};
        int[] sort = sort(a);
        System.out.println(Arrays.toString(sort));
    }
    public static int[] sort(int[] array){
        int temp = 0;
        for (int i = 0; i < array.length-1; i++) {
            boolean flag = false;
            for (int j = 0; j < array.length-1-i; j++) {
                if (array[j+1] < array[j]){
                    temp = array[j];
                    array[j] = array[j+1];
                    array[j+1] = temp;
                    flag = true;
                }
            }
            if (flag==false){
                break;
            }
        }
        return array;
    }
}

数组09:稀疏数组

数据结构的内容,减少存储空间的使用

for .each循环,遍历数组的简单写法。

for(int[] ints : 数组名){
}
package array;
public class ArrayDemo08 {
    public static void main(String[] args) {
        int[][] array1 = new int[11][11];
        array1[1][2]=1;
        array1[2][3]=2;
        System.out.println("输出原始数组");
        for (int[] ints :array1){
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
        //转换为稀疏数组
        /**
         *
         */
        //获取有效值的个数
        int sum = 0;
        for (int i = 0; i < 11; i++) {
            for (int j = 0; j < 11; j++) {
                if (array1[i][j]!=0){
                    sum++;
                }
            }
        }
        //创建一个稀疏数组
        int[][] array2 = new int[sum+1][3];
        array2[0][0] = 11;
        array2[0][1] = 11;
        array2[0][2] = sum;
        //遍历二维数组,将非0的值,存放在稀疏数组中
        int count = 0;
        for (int i = 0; i < array1.length; i++) {
            for (int j = 0; j < array1[i].length; j++) {
                if (array1[i][j]!=0){
                    count++;
                    array2[count][0] = i;
                    array2[count][1] = j;
                    array2[count][2] = array1[i][j];
                }
            }
        }
        System.out.println("==============================");
        System.out.println("输出稀疏数组");
        for (int i = 0; i < array2.length; i++) {
            System.out.println(array2[i][0]+"\t"+
                               array2[i][1]+"\t"+
                               array2[i][2]+"\t"
                                );
        }
        System.out.println("==============================");
        //读取稀疏数组
        int[][] array3 = new int [array2[0][0]][array2[0][1]];
        for (int i = 1; i < array2.length; i++) {
            array3[array2[i][0]][array2[i][1]] = array2[i][2];
        }
        System.out.println("输出还原数组");
        for (int[] ints :array3){
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
    }
}
相关文章
|
3月前
|
存储 缓存 Java
Java数组全解析:一维、多维与内存模型
本文深入解析Java数组的内存布局与操作技巧,涵盖一维及多维数组的声明、初始化、内存模型,以及数组常见陷阱和性能优化。通过图文结合的方式帮助开发者彻底理解数组本质,并提供Arrays工具类的实用方法与面试高频问题解析,助你掌握数组核心知识,避免常见错误。
|
5月前
|
Java API 微服务
2025 年 Java 从入门到精通学习笔记全新版
《Java学习笔记:从入门到精通(2025更新版)》是一本全面覆盖Java开发核心技能的指南,适合零基础到高级开发者。内容包括Java基础(如开发环境配置、核心语法增强)、面向对象编程(密封类、接口增强)、进阶技术(虚拟线程、结构化并发、向量API)、实用类库与框架(HTTP客户端、Spring Boot)、微服务与云原生(容器化、Kubernetes)、响应式编程(Reactor、WebFlux)、函数式编程(Stream API)、测试技术(JUnit 5、Mockito)、数据持久化(JPA、R2DBC)以及实战项目(Todo应用)。
351 5
|
2月前
|
小程序 Java 知识图谱
Java 学习笔记 —— BMI & BMR 计算器
这是一个使用 Java 编写的 BMI 与 BMR 计算器小程序,可输入年龄、性别、身高和体重,计算身体质量指数(BMI)和基础代谢率(BMR),并输出健康评估结果。通过该项目,掌握了 Java 的输入处理、数据验证、条件判断、数学运算及格式化输出等基础知识,是 Java 初学者的理想练习项目。
|
2月前
|
Java
Java 数组学习笔记
本文整理Java数组常用操作:遍历、求和、查找、最值及二维数组行求和等典型练习,涵盖静态初始化、元素翻倍、去极值求平均等实例,帮助掌握数组基础与应用。
|
8月前
|
存储 Java
# 【Java全栈学习笔记-U1-day02】变量+数据类型+运算符
本篇笔记主要围绕Java全栈学习的第二天内容展开,涵盖了变量、数据类型、运算符以及Scanner类的应用。首先介绍了变量的概念与命名规范,以及如何定义和使用变量;接着详细讲解了Java中的基本数据类型,包括整型、浮点型、字符型、布尔型等,并通过实例演示了数据类型的运用。随后,深入探讨了各类运算符(赋值、算术、关系、逻辑)及其优先级,帮助理解表达式的构成。最后,介绍了如何利用Scanner类实现用户输入功能,并通过多个综合示例(如计算圆面积、购物打折、变量交换及银行利息计算)巩固所学知识。完成相关作业将进一步加深对这些基础概念的理解与实践能力。
154 13
|
4月前
|
存储 Java 索引
java 数组
在 Java 中,数组是一种数据结构,用于存储多个相同类型的数据元素。数组的大小一旦创建后就不能改变,因此它是固定长度的。Java 数组是一种 对象,即使它存储的值是基本类型(如 int、double 等),它也是一个对象引用。
141 0
|
6月前
|
存储 人工智能 Java
打乱数组内容引发的问题( Java)
本文介绍了两种实现数组随机打乱的方法,并深入探讨了Java中原始数据类型与对象类型的差异。方法一通过自定义随机数交换数组元素位置,方法二借助`Collections.shuffle()`函数完成数组打乱。同时,文章详细解析了`int`和`Integer`的区别,包括声明方式、内存占用、初始化以及对象特性等,并讲解了自动装箱与拆箱的功能,帮助读者更好地理解Java的基础知识。
110 0
|
8月前
|
人工智能 Java
Java 中数组Array和列表List的转换
本文介绍了数组与列表之间的相互转换方法,主要包括三部分:1)使用`Collections.addAll()`方法将数组转为列表,适用于引用类型,效率较高;2)通过`new ArrayList&lt;&gt;()`构造器结合`Arrays.asList()`实现类似功能;3)利用JDK8的`Stream`流式计算,支持基本数据类型数组的转换。此外,还详细讲解了列表转数组的方法,如借助`Stream`实现不同类型数组间的转换,并附带代码示例与执行结果,帮助读者深入理解两种数据结构的互转技巧。
579 1
Java 中数组Array和列表List的转换
|
8月前
|
存储 监控 Java
《从头开始学java,一天一个知识点》之:数组入门:一维数组的定义与遍历
**你是否也经历过这些崩溃瞬间?** - 看了三天教程,连`i++`和`++i`的区别都说不清 - 面试时被追问&quot;`a==b`和`equals()`的区别&quot;,大脑突然空白 - 写出的代码总是莫名报NPE,却不知道问题出在哪个运算符 这个系列就是为你打造的Java「速效救心丸」!我们承诺:每天1分钟,地铁通勤、午休间隙即可完成学习;直击痛点,只讲高频考点和实际开发中的「坑位」;拒绝臃肿,没有冗长概念堆砌,每篇都有可运行的代码标本。明日预告:《多维数组与常见操作》。 通过实例讲解数组的核心认知、趣味场景应用、企业级开发规范及优化技巧,帮助你快速掌握Java数组的精髓。
191 23