JavaSE从零学起11. 数组:数组声明与创建、Java内存分析、三种初始化、for -each循环 、求数组元素的总和、找出最大值

数组

数组概述

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

数组声明与创建

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

    dataType[] arrayName;
    
  2. Java语言使用new操作符来创建数组。语法如下:

    dataType[] arrayName = new dataType[arraySize];
    
  3. 数组的元素是通过索引访问的,数组索引从0开始。

  4. 获取数组长度代码:

    arrays.length

看一个数组声明创建并输出的实例:

public class ArrayDemo01 {
    //变量类型 变量名 = 变量值;
    //数组类型
    public static void main(String[] args) {
        int[] nums;//声明一个数组
        nums = new int[10];//创建一个数组
        //创建和声明可以结合在一起写
        int [ ]nums1 = new int[10];
        //3.给数组元素赋值
        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;
        System.out.println(nums[0]);
        System.out.println(nums[8]);
        System.out.println(nums[9]);//当数组元素未声明的时候输出会被赋默认值0
        //计算所有元素的和
        int sum=0;
        //arrays.length:获取数组长度
        for (int i = 0; i < nums.length; i++) {
          sum = sum + nums[i] ;
        }
        System.out.println(sum);
    }
}

输出结果:
1
9
0 //当数组元素未声明的时候输出会被赋默认值0
45

Java内存分析

Java内存分析图

对于数组的声明与创建,只用到堆和栈。

堆和栈

  1. 引用变量和基本变量的类型会存放在栈中。所以声明数组int[] array =null;后,会在栈中创建一个名为array的空间。

  2. 堆是存放new的对象和数组的地方。创建数组array = new int[10]后,会在堆中开辟一个空间,空间会分为10个小空间用来存放数组元素。

  3. 数组下标从0开始。给数组元素赋值后,堆中开辟的10个小空间就会对应存放10个数组元素的值。如果没有给下标为0-9其中的某个元素赋值,输出该元素时系统就会给他赋值默认值0.如果输出的是未创建的数组元素nums [10]。将会报错(ArrayIndexOutOfBoundsException:数组下标越界异常):

    Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: 10

三种初始化

  1. 静态初始化

    //静态初始化: 创建+赋值
    int[] a = {1,2,3,4};
    System.out.println(a[0]);
    Person[] person = {new Person(), new Person()};
    
  2. 动态初始化(包含默认初始化)

    public class ArrayDemo02 {
        public static void main(String[] args) {     
            //动态初始化:包含默认初始化:数组元素默认值为0
            int[]b = new int[10];
            b[0] =10;
            b[1] =5;
            System.out.println(b[0]);
            System.out.println(b[1]);
            System.out.println(b[3]);
            System.out.println(b[5]);
        }
    }
    
    输出结果:
    10
    5
    0
    0
    
  3. 数组的默认初始化

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

数组的四个基本特点

  1. 数组的长度是确定的:数组一旦被创建,它的大小就是不可改变的。

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

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

    int[] a = {1,2,3,4};
    
    Person[] person = {new Person(), new Person()};
    
  4. 数组变量属于引用类型。数组本身就是对象,数组中的每个元素相当于该对象的成员变量。Java对象保存在栈中,因此数组无论保存原始类型还是其他类型。数组对象本身是在堆中的。

数组使用

for -each循环

可以用for-each循环机构来处理数组中的每个元素且不必考虑指定下标值。

for-each循环的语法格式为:

for(variable:element){statement}

其中element这一集合表达式必须是一个数组或者是一个实现了Iterable接口的类对象(例如ArrayList)。

下面来看一个for-each循环遍历数组并输出的例子:

public class ArrayDemo03 {
      public static void main(String[] args) {
        int[] nums = {1, 2, 3, 4, 5, 6, 7, 8, 9};
          for (int array:nums) {
              System.out.print(array + " ");
          }
      }
}

输出结果:
1 2 3 4 5 6 7 8 9 

for 循环遍历输出

看完了for-each循环输出,再看用普通的for循环遍历输出。

public class ArrayDemo03 {      
      public static void main(String[] args) {        
         int[] nums = {1, 2, 3, 4, 5, 6, 7, 8, 9};               
           for (int array : nums) {            
              System.out.print(array + " ");        
          }        
     }
}

输出结果:1 2 3 4 5 6 7 8 9 

求数组元素的总和

public class ArrayDemo03 {      
	public static void main(String[] args) {        
		int[] nums = {1, 2, 3, 4, 5, 6, 7, 8, 9};               
		  for (int array : nums) {            
			System.out.print(array + " ");        
		}          
			System.out.println();          
  			System.out.println("==============");          

		//计算所有元素的总和        
		int sum =0;           
		for (int i = 0; i < nums.length; i++) {
			sum = sum + nums[i];          
			             }             
             System.out.println(sum);    
             }
}

输出结果:1 2 3 4 5 6 7 8 9 ==============45

找出最大值

for (int i = 0; i < nums.length; i++) {
    		if(max<nums[i]){        
    		max = nums[i];    
    }
}

数组作方法入参

写了一个reverseArrays方法用来输出数组并将其反转输出:

public class Demo04 {    
	public static void main(String [] args) {        
		int []nums = {1,2,3,4,5};        
		reverseArrays(nums);    
		}    
	public static void reverseArrays(int []array){        
		for (int i = 0; i<array.length ; i++) {
		System.out.println(array[i]);        }
		System.out.println("=================");
		for (int i =array.length-1; i>=0 ; i--) {
		System.out.println(array[i]);
		}
	}
}

数组作返回值

调用一个用以反转数组且数组作为返回值的方法 reverse和一个打印数组的方法printArrays:

public class ArrayDemo03 {
	public static void main(String[] args) {        
		int[] nums = {1, 2, 3, 4, 5, 6, 7, 8, 9};
		int []result =reverse(nums);          
		printArrays(result);    }    

public static void printArrays(int []array){
	for (int element : array) {            
	System.out.print(element + " ");        
	}        
	System.out.println();    
	}    
public static int[] reverse(int []nums) {        
	int[] result = new int[nums.length];        
	for (int i = 0; i < nums.length; i++) {            
	for (int j = nums.length - 1 - i; 0 <= j && j <= nums.length - 1; j--)
	result[j] = nums[i];            
	}        
}        
	return result;    
	}
}

多维数组

下面介绍一下二维数组arr[][]。先看一下二维数组arr[][]的内存空间占用图:

在这里插入图片描述

多维数组可以看做是数组的数组。二维数组相当于一个特殊的一维数组,其中每一个元素都是数组。初始化二维数组有两种方式:

int [][]array = new int[4][2];

相当于创建了一个可以容纳4行2列数组的数组。

如果已知数据,则可以直接使用简写形式对二维数组进行初始化,例如int[][]arr = {{1,2}{2,3}{3,4}{4,5}}

下面我们来看二维数组初始化并输出数组元素的代码:

public class ArrayDemo04 {
    public static void main(String[] args) {
     /* {1,2} array[0] 其中 array[0][0] = 1; array[0][1] = 2
     /* {2,3} array[1]     array[1][0] = 2; array[1][1] = 3
     /* {3,4} array[2]
     /* {4,5} array[3]
     * */
        int [][]array = {{1,2},{2,3},{3,4},{4,5}};
         System.out.println(array[0][0]);
         int [][]nums = new int[4][2];
        System.out.println();

        System.out.println();
        System.out.println("=======================");
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j] + " ");

            }

        }
    }
}

输出结果:
1

=======================
1 2 2 3 3 4 4 5 

int [][]array = {{1,2},{2,3},{3,4},{4,5}};相当于一维数组array[]的数组长度为array.length = 4,二维数组array[][]的长度为2.且其中:

array[0] = {1,2}  array[1] = {2,3}    
array[2] = {3,4} array[3] = {4,5} 
其中 array[0][0] = 1; array[0][1] = 2;      
array[1][0] = 2; array[1][1] = 3;   
 array[2][0] = 3; array[2][1] = 4;    
 array[3][0] = 4; array[3][1] = 5;    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Clap of thunder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值