首页 > 编程语言 >Java数组

Java数组

时间:2024-03-03 14:45:28浏览次数:17  
标签:Java int System arrays 数组 public out

Java数组

一、什么是数组

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

二、数组声明创建

  • 首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:

    dataType[] arrayRefVar;  //首选的方法
    或者
    dataType arrayRefVar[];  //效果相同单但不是首选的方法   
    public class ArrayDemo01 {
        //变量的类型 变量的名字 = 变量的值;
        //数组类型
        public static void main(String[] args) {
            int[] nums;//1.定义
            int nums2[];//2.定义
            /*
            两种都可以定义数组,为什么第一种是首选呢?
            第一种是java中定义数组的方式,而第二种是采用C和C++中的方式
            第二种方式完全是因为是想要早些年的C和C++程序员能快速适应java
            而设定的。
             */
        }
    }
    
  • Java语言使用new操作符来创建数组,,语法如下:

    dataType[] arrayRefVar = new dataType[arraySize];
    nums = new int[10];//这里面可以存放10个int类型的数字
    
            int[] nums;//1.声明一个数组
    //
            nums = new int[10];//这里面可以存放10个int类型的数字
                               //2.创建一个数组
            //1和2可以合并起来写
            int[] numsw2 = new int[10];
    
    
  • 数组的元素是通过索引访问的,数组索引从0开始。

  • 获取数组长度

    arrays.length
    

三、三种初始化及内存分析

一、内存分析

二、三种初始化状态

  • 静态初始化

    int[] a = {1,2,3};
    Man[] mans = {new Man(1,1),new Man(2,2)};
    
  • 动态初始化

    int[] a = new int[2];
    a[0] = 1;
    a[1] = 2;
    
  • 数组的默认初始化

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

      public class ArrayDemos02 {
          public static void main(String[] args) {
              //静态初始化 创建加赋值
              int[] a = {1,2,3,4,5};
              
              //Man是一个类
              Man[] man = {new Man(),new Man()};//这个数组里的元素全是Man对象
              
              //动态初始化:包含默认初始化
              int[] a1 = new int[2];
              a1[0] = 1;
              System.out.println(a[0]);
          }
      }
      

四、下标越界及小结

1、数组的四个基本特点

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

2、数组边界

  • 下标合法区间[0 , length-1],如果越界就会报错

    public static void main(String[] args){
        int[] a = new int[2];
        System.out.println(a[2]);
    }
    
  • ArrayIndexOutOfBoundsExceotion:数组下标越界异常

  • 小结

    • 数组是相同数据类型(数据类型可以为任意类型)的有序集合
    • 数组也是对象。数组元素相当于对象的成员变量
    • 数组长度是确定的,不可变的。如果越界,则报:ArrayIndexOutOfBounds

五、数组的使用

1、基本的

public class ArrayDemo03 {
    public static void main(String[] args) {
        int[] arrays = {1,2,3,4,5};
        //打印全部的数组元素
        for (int i = 0; i < arrays.length; i++){
            System.out.println(arrays[i]);
        }
        System.out.println("++++======");
        //计算所有元素的总和
        int sum = 0;
        for (int i = 0; i < arrays.length; i++){
            sum += arrays[i];
        }
        System.out.println("sum="+sum);
        System.out.println("+==========");
        //查找最大元素
        int max = arrays[0];
        for (int i = 1; i < arrays.length; i++){
            if(max < arrays[i]){
                max = arrays[i];
            }
        }
        System.out.println("max="+max);
    }
}

2、进阶的

public class ArrayDemo04 {
    public static void main(String[] args) {
        int[] arrays = {1,2,3,4,5};
        //JDK1.5没有下标
//        for (int array : arrays) {
//            System.out.println(array);
//        }
        //printArray(arrays);
        printArray(reverse(arrays));
    }
    //打印数组元素方法
    //数组可以当作参数
    public static void printArray(int[] arrays){
        for (int i = 0; i < arrays.length; i++) {
            System.out.print(arrays[i]+"\t");
        }
    }
    //反转数组
    //数组作为返回值的情况
    public static int[] reverse(int[] arrays){
        int[] result = new int[arrays.length];

        for (int i = 0,j = result.length-1; i < result.length; i++,j--) {
            result[j] = arrays[i];
        }
        return result;
    }
}

六、多维数组

  • 多维数组可以看成是数组组成的数组,比如二维数组就是一个特殊的一维数组,其中每一个元素都是一个一维数组

  • 二维数组

    intr a[][] = new int[2][5]//这定义了一个2行5列的数组
        
        public class ArrayDemo05 {
        public static void main(String[] args) {
            //4行2列
            /*
                1,2     array[0]
                2,3     array[1]
                3,4     array[2]
                4,5     array[3]
             */
    
            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.println(array[i][j]);
                }
    
            }
        }
    }
    
    
  • 解析:以上二维数组a可以看成一个两行五列的数组

七、Arrays类

  • 数组的工具类java.util.Arrays

  • 由于数组对象本身并没有上面方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从而可以对数据对象进行一些基本的操作。

  • 查看JDK文档

  • Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用,而“不用”使用对象来调用(注意:是“不用”而不是“不能”)

  • 具有以下常用功能:

    • 给数组赋值:通过 fill 方法。

    • 对数组排序:通过 sort 方法,按升序。

    • 比较数组:通过 equals 方法比较数组中元素值是否相等。

    • 查找数组元素:通过 binarySearch 方法能对排序好的数组进行二分查找法操作。

      import java.util.Arrays;
      
      public class ArrayDemo06 {
          public static void main(String[] args) {
              int[] a = {2,43,3,25,456,57768,789,45};
              //打印数组元素Arrays.toString
              System.out.println(Arrays.toString(a));
              printArray(a);
      
              //升序排序
              Arrays.sort(a);
              System.out.println(Arrays.toString(a));
      
              //填充
              Arrays.fill(a,0);
              System.out.println(Arrays.toString(a));
      
              //将第二个元素到第四个元素填充为1,注意这里是左闭右开即[2,4);
              Arrays.fill(a,2,4,1);
              System.out.println(Arrays.toString(a));
          }
          public static void printArray(int[] a){
              for (int i = 0; i < a.length; i++) {
                  if (i == 0){
                      System.out.print("[");
                  }
                  if (i == a.length-1){
                      System.out.println(a[i]+"]");
                  }else {
                      System.out.print(a[i] + ", ");
                  }
                  }
          }
      }
      
      

八、冒泡排序(总共有八大排序)

  • 冒泡排序代码非常简单,两层循环,外层冒泡轮数,里层依次比较。

九、稍后会补八大排序的专题

标签:Java,int,System,arrays,数组,public,out
From: https://www.cnblogs.com/chenmochen/p/18050034

相关文章

  • Java学习笔记——第四天
    数组数组是什么数组就是一个容器,用来存一批同种类型的数据。数组有什么用遇到批量数据的存储和操作时,数组比变量更适合。代码简洁,逻辑清晰。数组的定义静态初始化数组定义数组的时候直接给数组赋值。格式1(完整格式)数据类型[]数组名=new数据类型[]{元素1,元素2,元素3…......
  • Java中类与类、类与接口、接口与接口之间是什么关系?
    Java中类与类之间是什么关系?1.依赖依赖是指一个类(称为依赖类)使用到了另一个类(称为被依赖类),而这种使用关系是具有偶然性的、临时性的、非常弱的,但是被依赖类(目标类)的变化会影响到依赖类。例如,比如人A要过河,需要借用一条船B,此时人A与船B之间的关系就是依赖。表现在代码层面,为类B......
  • 力扣88.合并两个有序数组
    题目:给你两个按非递减顺序排列的整数数组nums1和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目。请你合并nums2到nums中,使合并后的数组同样按非递减顺序排列。注意:最终,合并后数组不应由函数返回,而是存储在数组nums1中。为了应对这种情况,nums1的初始长度为m+n......
  • Java方法
    何为方法Java方法是语句的集合,它们在一起执行一个功能,方法包含于类或对象中,方法在程序中被创建,在其他地方被引用设计方法的原则:保持方法的原子性-一个方法只完成1个功能,这样利于后期的拓展publicclassDemo01{publicstaticvoidmain(String[]args){ints......
  • 「java.util.concurrent并发包」之 Unsafe
    一unsafe介绍Unsafe是位于sun.misc包下的一个类,主要提供一些用于执行低级别、不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等,这些方法在提升Java运行效率、增强Java语言底层资源操作能力方面起到了很大的作用。但由于Unsafe类使Java语言拥有了类似C......
  • 是学习c++还是java?
    上高中时,自己第一次接触到学校的中华学习机和苹果机,当时中华学习机上可以进行basic编程,那时候自己其实就爱上编程,但是没有人指点,也学习不得法,所以就没有进行下去!大学时,自己的主攻专业并不是计算机,但是学习了《计算机基础》和《c程序设计》,前者主要学习dos命令和wps文字处理,后者主......
  • Java方法
    JAVA方法一、什么是方法?System.out.println(),他们是什么?System.out.println();/*System是一个类out是System下的一个输出对象println()就是一个方法*/Java方法是语句的集合,它们在一起执行一个功能,方法是解决一类问题的步骤的有序组合方法包含于类或对象中方法在......
  • 力扣80.删除排序数组中的重复项 II
    题目:给你一个有序数组nums,请你删除重复出现的元素,使得出现次数超过两次的元素只出现两次,返回删除后数组的新长度。实现方法:使用map计数,用快慢指针方法,快指针不断加一,慢指针在计数小于出现次数时加一,再将快指针指向的数赋给慢指针指向的数。funcremoveDuplicates(nums......
  • Java引用类型解析:掌握强引用、软引用、弱引用和幻象引用的妙用
     概述:Java中的引用分为强引用、软引用、弱引用和幻象引用。强引用是最常见的,不会被垃圾回收;软引用在内存不足时才被回收;弱引用在下一次垃圾回收时回收;幻象引用用于检测对象是否已被回收。它们各自适用于不同场景,帮助开发者更灵活地管理对象生命周期,避免内存泄漏。在Java中,引......
  • 关联数组 (Associative Array)
    下方数据结构可以被描述为一个JavaScript对象(Object),其中每个键是一个UUID(UniversallyUniqueIdentifier),值是一个待办事项对象。在编程和数据结构领域,这种组织形式没有一个特定的官方名称,但它通常被称为“字典”、“映射”、“关联数组”或“哈希表”。字典(Dictionary):在Pyth......