java是世界上最好的语言之数组

目录

1.数组概述

数组的定义:

2.数组声明创建

声明与创建:

3数组创建的底层原理之三种初始化及内存分析:

1.静态初始化

2.动态初始化

3.数组的默认初始化

4.内存分析

4.数组使用

四个基本特点

数组边界

数组的使用具体介绍

数组的一些基本使用:

进阶使用:

数组作方法入参

数组作返回值

5.多维数组

二维数组

内存结构:

基本格式:

两种初始化方法:

获取二维数组长度:

6.Arrays类(关于数组的工具类)

1.打印数组

2.数组排序

3.二分查找

4.元素填充


大家好,我是躺在床上混子日的躺平哥,今天我们来学习java中的数组,希望给位大佬多多指教!

1.数组概述及定义

数组的概述:

数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。

数组是一个最简单的数据结构。

数组的定义:

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

数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。

其中,每一个数据称作为一个数组元数,每一个数组元数可以通过一个下表来访问他们!

2.数组声明创建

声明与创建:

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

变量类型 变量的名字 =变量的值

数组类型 比如:int[],是存储整数型的数组。

dateType[]arrayRefVar;//首选的方法
或dateType array RefVar[];//效果相同,但不是首选的方法

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

dateType[]arrayRefVar =new dateType[arraySize];

数组的元素是通过索引访问的,数组索引从0开始。比如a[0],a[1],a[2],a[3],a[4],a[5] 这0,1,2,3,4,5,就是索引!

获取数组长度操作:

arrays.length

[下面我们来声明一个数组并创建一个数组,然后引用数组元素并求元素的和]


    public static void main(String[] args) {
       int[] nums;//1,声明一个数组
       nums=new int[10];//2,创建一个数组
        //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;
        nums[9]=10;
        System.out.println(nums[0]);
        //4,计算所有元素的和
        int sum =0;
        for (int i=0;i<nums.length;i++)
        {
sum =sum+nums[i];
        }
        System.out.println("总和为:"+sum);

    }

运行结果为:

3数组创建的底层原理之三种初始化及内存分析:

1.静态初始化

(创建+赋值:即创建数组的时候就要给数据!)

(初始化时由程序猿显示指定每个数组元素的初始值,由系统决定数组的长度)

int[] a={1,2,3};
Man[] mans ={new Man(1,1),new Man(2,2)};

                                                                                                                                           

2.动态初始化

(包含默认初始化)

(动态初始化就是在初始化的时候指定数组长度(这时已经分配内存))

int [] a=new int[2]
a[0]=1;
a[1]=2;

括号里的内容也是动态初始化和静态初始化的区别!

3.数组的默认初始化

(默认赋值:int型默认值为0,string型默认值为null(空))

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

4.内存分析

下面的图比较容易理解 

 

4.数组使用

在使用数组前要先掌握数组的四个基本特点

四个基本特点

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

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

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

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

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

数组边界

下标的合法区间:【0,length-1】,如果越界就会报错;

public static void main (String[] args){
int [] a=new int[2];
System.out.println(a[2]);


}

 小结:

1.数组是相同数据类型(数组类型可以为任意类型)的有序集合。

2.数组也是对象。数组元素相当于对象的成员变量。

3.数组长度是确定的,不可变的。如果越界,则会报上方的红色语句!

数组的使用具体介绍

数组的一些基本使用:

普通的for循环(用的最多)

我们要从数组里取出一些数据或者下标进行操作时使用

    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(arrays[i]>max){
            max=arrays[i];
        }
        System.out.println("max"+max);
    }

进阶使用:

For-Each循环(即增强for循环)

一般用来打印一些结果时使用

  public static void main(String[] args) {
        int[]arrays ={1,2,3,4,5};
        //JDK1.5,没有下标
        for (int array : arrays) {
            System.out.println(array);

            
        }
    }

数组作方法入参

就是咱们可以对数组进行操作

数组可以做参数传递给方法。

例如:

//打印数组元素
public static void printArray(int[] array) { 
for (int i = 0; i < array.length; i++) { 
System.out.print(array[i] + " ");
 } 
}

数组作返回值

当我们想把数组修改一下,然后返回一个新的数组的时候使用!

return后的是返回值

//反转数组
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; 
}

记住就行,操作固定!

5.多维数组

多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一个一维数组.

二维数组

内存结构:

 

基本格式:

int a[][]=new int[2][5];

 因为二维数组只有两个下标都知道才能定位具体位置!所以后面两个数!

两种初始化方法:

1: 动态初始化
数据类型 数组名 [ ][ ] = new 数据类型[m][n]
数据类型 [ ][ ]  数组名 = new 数据类型[m][n]
数据类型 [ ]   数组名 [ ] = new 数据类型[m][n]

举例:int [ ][ ]  arr=new  int [5][3];  也可以理解为“5行3例”

2: 静态初始化
数据类型 [ ][ ]   数组名 = {{元素1,元素2....},{元素1,元素2....},{元素1,元素2....}.....};

举例:int [ ][ ]  arr={{22,15,32,20,18},{12,21,25,19,33},{14,58,34,24,66},};

静态初始化可用于不规则二维数组的初始化

public static void main(String[]args){
		int [][] arr=new int[][]{{4,5,6,8},{2,3},{1,6,9}};
 
		System.out.println(arr.length);//输出行数
		System.out.println(arr[0].length);//输出列数
		
	}


二者区别跟一维数组的动态初始化和静态初始化相同,详见上方!

获取二维数组长度:

数组值arr[x][y]表示指定的是第x行第y列的值。
在使用二维数组对象时,注意length所代表的长度。
数组名后直接加上length(如arr.length),所指的是有几行(Row)。

指定索引后加上length(如arr[0].length),指的是该行所拥有的元素,也就是列(Column)数目。

6.Arrays类(关于数组的工具类)

想一下我们之前是不是学过scanner类,他是接收键盘输入的一个类,而Arrays类是操作数组的类。说白了java的学习就是在学习一个又一个的类!

Java 8 中文版 - 在线API中文手册 - 码工具 

 

由于数组对象本身并没有什么方法可以供我们调用,但API中提供了一个工具类Arrays供我们使用,从

而可以对数据对象进行一些基本的操作。

而且Arrays类中的方法都是static修饰的静态方法,在使用的时候可以直接使用类名进行调用!

而"不用"使用对象来调用(注意:是"不用" 而不是 "不能")

 java.util.Arrays 类能方便地操作数组. 使用之前需要导包!

具有一下常用功能:

1.给数组赋值:通过 fifill 方法。

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

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

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

1.打印数组

public class java1 {
    public static void main(String[] args) {
        int[] nums = new int[5];
        nums[0] = 1;
        nums[1] = 2;
        nums[2] = 3;
        nums[3] = 4;
        nums[4] = 5;
 
        System.out.println(Arrays.toString(nums));
 
    }
}

2.数组排序

public static void sort(int[] a) :对指定的 int 型数组按数字升序进行排序。

public class java1 {
    public static void main(String[] args) {
        int[] nums = new int[5];
        nums[0] = 1;
        nums[1] = 6;
        nums[2] = 55;
        nums[3] = 15;
        nums[4] = 45;
 
        System.out.println(Arrays.toString(nums));
        Arrays.sort(nums);
        System.out.println(Arrays.toString(nums));
 
    }
}

3.二分查找

在数组中查找指定元素并返回其下标

注意:使用二分搜索法来搜索指定的数组,以获得指定的值。必须在进行此调用之前对数组进行排序(通过sort方法等)。如果没有对数组进行排序,则结果是不确定的。

 如果数组包含多个带有指定值的元素,则无法保证找到的是哪一个。

Arrays.binarySearch(); //二分查找法找指定元素的索引值(下标)

数组一定是排好序的,否则会出错。找到元素,只会返回最后一个位置

	int[] arr = {10,20,30,40,50};
	System.out.println(Arrays.binarySearch(arr, 30));
    //输出:2 (下标索引值从0开始)
	int[] arr = {10,20,30,40,50};
	System.out.println(Arrays.binarySearch(arr, 36));
	//输出:-4 (找不到元素,返回-x,从-1开始数,如题,返回-4)
	int []arr = {10,20,30,40,50};
	System.out.println(Arrays.binarySearch(arr, 0,3,30));
	//输出:2 (从0到3位(不包括)找30,找到了,在第2位,返回2)
    int []arr = {10,20,30,40,50};
    System.out.println(Arrays.binarySearch(arr, 0,3,40));
    //输出:-4 (从0到3位(不包括)找40,找不到,从-1开始数,返回-4)

4.元素填充

Arrays.fill(); //填充数组

    int[] arr = new int[5];//新建一个大小为5的数组
	Arrays.fill(arr,4);//给所有值赋值4
	String str = Arrays.toString(arr); // Arrays类的toString()方法能将数组中的内容全部打印出来
	System.out.print(str);
	//输出:[4, 4, 4, 4, 4]
	int[] arr = new int[5];//新建一个大小为5的数组
	Arrays.fill(arr, 2,4,6);//给第2位(0开始)到第4位(不包括)赋值6
	String str = Arrays.toString(arr); // Arrays类的toString()方法能将数组中的内容全部打印出来
	System.out.print(str);
	//输出:[0, 0, 6, 6, 0]

  • 26
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 42
    评论
评论 42
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值