【狂神说学习笔记】Java数组

狂神说Java学习地址

数组概述

数组是相同类型数据的有序集合

数组声明创建

  • 定义数组

    //格式: dateType[] arrayRefVar;
    //变量类型    变量名字    变量值
    
    //举例
    
    int[] nums;  //1.定义数组
    
  • 创建数组

    //格式   dateType[] arrayRefVar=new dateType[arraySize];
    
    //举例
    
    int[] nums=new int[10];//2.创建一个可以存放十个int类型的数字
    
  • 数组的元素是通过索引访问的,数组索引从0开始。

  • 获取数组长度

    array.length
    
  • 数组三种初始化方式

    1. 静态初始化

      //静态初始化:  创建+赋值
      int[] a={1,2,3,4,5,6};
      
    2. 动态初始化

      //动态初始化:包含默认初始化
      int[] b=new int[10];
      b[0]=10;
      System.out.println(b[4]);
      
    3. 数组的默认初始化

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

      例如2中的b[4]默认值为0。

  • 数组的特点

    • 长度是确定的,数组一旦被创建,它的大小就是不可以改变的。
    • 元素必须是相同类型,不允许出现混合类型。
    • 数组中的元素可以是任何数据类型,包括基本类型和引用类型
    • 数组变量属引用类型,数组也可以看成是对象,数组中的每个元素都相当于该对象的成员变量
    • 数组本身就是对象,Java中对象是在中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。

快捷键:选中需要注释的代码,然后ctrl+?/

数组使用

  • 普通的for循环和增强for循环

    public class ArrayDemo03 {
        public static void main(String[] args) {
            int[] array={1,2,3,4,5};
            int sum=0;
    
            //打印全部的数组元素并求和
    
            //增强for循环
            for(int x:array){
                System.out.print(x+"\t");
                sum+=x;
            }
            System.out.println("sum="+sum);
            System.out.println("===============");
            //普通for循环,且求和
            sum=0;
            for (int i=0;i<array.length;i++){
                System.out.print(array[i]+"\t");
                sum+=array[i];
            }
            System.out.println("sum="+sum);
            System.out.println("=====================");
            int max=array[0];
            for(int i=1;i<array.length;i++){
                if (max<array[i]){
                    max=array[i];
                }
            }
            System.out.println("max="+max);
        }
    }
    
  • 数组做方法入参和数组作返回值

    public class ArrayDemo04 {
        public static void main(String[] args) {
            //反转一个数组
            int[] arrays={1,2,3,4,5};
            int[] reverse=reverse(arrays);
            for (int x:reverse){
                System.out.print(x+"\t");
            }
    
        }
    
        //反转数组的方法
        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;
        }
    }
    
    

多维数组

  • 二维数组

    int a[][]=new int[2][5];
    
  • 举例

    public class ArrayDemo05 {
        public static void main(String[] args) {
            //打印二维数组元素
            int[][] array={{1,2},{2,3},{3,4},{4,5}};
    
            for(int i=0;i<array.length;i++){
                for(int j=0;j<array[i].length;j++){
                    System.out.print(array[i][j]+"\t");
                }
                System.out.println();
            }
        }
    }
    

Arrays类

  • 使用方法:jdk帮助文档

  • 举例

    1. 打印数组:Arrays.toString

    2. 数组升序排序:Arrays.sort

    3. 数组元素填充:Arrays.fill

    4. 代码如下:

      import java.util.Arrays;
      
      public class ArrayDemo06 {
          public static void main(String[] args) {
              int[] a={1,2,3,4,4545,23,56,32};
              System.out.println(a);  //[I@1b6d3586
      
              //打印数组元素
              System.out.println("打印数组元素:");
              System.out.println(Arrays.toString(a));
      
      
              //数组排序
              Arrays.sort(a);
              System.out.println("数组排序:");
              System.out.println(Arrays.toString(a));
        
              //填充数组元素
              Arrays.fill(a,0);
              System.out.println("填充数组元素全为0:");
              System.out.println(Arrays.toString(a));
      
          }
      }
      

冒泡排序

代码如下

import java.util.Arrays;

public class ArrayDemo07 {
    public static void main(String[] args) {
        int[] a={4,76,23,6434,245,1,4,9};
        int[] sort=sort(a);
        System.out.println(Arrays.toString(sort));



    }

    //冒泡排序
    //1.比较两个数组中相邻元素
    //2.每一次比较,都会产生出一个最大,或者最小的数字
    //3.下一轮可以少一次排序
    //4.依次循环,直到结束
    public static int[] sort(int[] array) {
        //临时变量
        int temp = 0;
        //外层循环
        for (int i = 0; i < array.length - 1; i++) {
            boolean flag=false;     //通过flag标识位减少没有意义的比较
            //内层循环,比较判断两个数,如果第一个数比第二个数大,则交换位置

            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;
    }
}

稀疏数组

当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。

  • 处理方式

    1. 记录数组一共有几行几列,有多少个不同值
    2. 把具有不同值的元素和行列记录在一个小规模的数组中,从而缩小程序的规模
  • 代码如下:

    public class ArrayDemo08 {
        public static void main(String[] args) {
            //1.创建一个二维数组 11*11           0:没有棋子  1:黑棋         2:白棋
            int[][] array1=new int[11][11];
            array1[1][2]=1;
            array1[2][3]=2;
            //输出原始的数组
            //for-each快捷键
            //array1.for
            //ints.for
            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++;
                    }
                }
            }
            System.out.println("有效值的个数="+sum);
    
    
            //创建一个稀疏数组的数组
            int[][] array2=new int[sum+1][3];
            array2[0][0]=11;
            array2[0][1]=11;
            array2[0][2]=sum;
    
            //遍历二维数组,将非零的值,存放在稀疏数组中
            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("输出稀疏数组");
            for (int i = 0; i < array2.length; i++) {
                for (int j = 0; j < array2[i].length; j++) {
                    System.out.print(array2[i][j]+"\t");
                }
                System.out.println();
            }
            System.out.println("========================");
            System.out.println("读取稀疏数组的值");
    
            //1.读取稀疏数组
            int[][]array3=new int [array2[0][0]][array2[0][1]];
    
            //2.给其中的元素还原它的值
            for (int i = 1; i < array2.length; i++) {
                array3[array2[i][0]][array2[i][1]]=array2[i][2];
            }
            //3.打印数组
            System.out.println("输出原始的数组");
            for (int[] ints : array3) {
                for (int anInt : ints) {
                    System.out.print(anInt+"\t");
                }
                System.out.println();
            }
    
        }
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 狂神说Java全部笔记是一部非常受欢迎的Java学习资料。这份笔记主要由狂神根据自己多年的Java开发经验总结而成,包含了Java开发中的各个方面。 首先,笔记中涵盖了Java的基础知识,如Java的发展历史、安装配置、基本语法、数据类型、运算符等。这些内容对于初学者来说非常重要,可以帮助他们快速入门。 其次,笔记中还介绍了Java的面向对象编程思想,包括封装、继承、多态等概念,以及如何使用类、对象、方法等构建自己的程序。这是Java开发的核心内容,通过深入学习这些知识,可以更好地掌握Java编程。 此外,狂神还在笔记中详细介绍了Java中常用的类库和API,如集合框架、IO操作、多线程、网络编程等。这些内容对于提升开发效率和扩展能力非常有帮助。 最后,笔记中还包含了一些实战项目的案例分析,可以帮助读者将所学的知识应用到实际项目中。通过动手实践,读者可以更好地理解和掌握Java开发的各个环节。 总的来说,狂神说Java全部笔记是一份非常全面和实用的学习资料,适合各个阶段的Java学习者。无论是初学者还是有一定经验的开发者,都可以从中获益良多。通过学习这份笔记,读者可以打下良好的Java基础,掌握Java开发的核心知识,提高开发能力,从而更好地应对实际项目的需求。 ### 回答2: 狂神说Java是一份关于Java编程语言的全面笔记,内容涵盖了Java的基础知识、面向对象编程、集合框架、多线程编程、Java IO、数据库编程等方面的内容。 在Java的基础知识部分,狂神详细介绍了Java的发展历史、Java的安装配置、Java的数据类型、运算符、控制语句等基本知识,并给出了许多实际案例进行演示和讲解,帮助读者理解和掌握这些概念和技能。 在面向对象编程部分,狂神详细介绍了Java中的类和对象、封装性、继承性、多态性等面向对象的特性,以及如何利用这些特性进行软件开发,包括类的设计、构造方法、方法重载和方法重写等内容。 在集合框架部分,狂神讲解了Java中的各种集合类,如ArrayList、LinkedList、HashMap等,并介绍了它们的使用方法和常见应用场景,以及集合的遍历和排序等相关操作。 在多线程编程部分,狂神详细介绍了Java中的线程概念、线程的创建和启动、线程同步与通信等内容,并提供了一些实际案例来演示多线程编程的实际应用。 在Java IO部分,狂神讲解了Java中的输入输出流、文件操作、字符流和字节流等内容,并提供了一些示例代码进行演示。 在数据库编程部分,狂神介绍了Java中如何使用JDBC进行数据库的连接和操作,包括建立连接、执行SQL语句、事务处理等内容,并提供了一些实际案例进行演示。 总之,狂神说Java是一份非常全面、详细的Java编程笔记,适合初学者和有一定基础的Java开发者阅读和学习。通过阅读狂神说Java,读者可以系统地了解和掌握Java编程的基本知识和技能,为以后的Java开发打下良好的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值