Java数组详解

Java数组详解

本文将介绍Java数组的一些基本语法及应用,如java一维数组,二维数组的声明,分配空间,数组访问,赋值,数组排序,查找等等。

数组定义

数组是相同数据有序集合,简单来说,就是将若干相同元素按一定的次序存放在一起。其特点如下:

  1. 数组存放元素类型必须相同不能有混合类型
  2. 数组各元素按先后顺序有序的存放在内存中,每个元素通过数组名和下标来访问。
  3. 数组的长度固定,一旦创建,无法进行修改。
  4. 数组元素类型可以是任何类型,包括基本类型引用类型(类、接口、数组)。

数组声明

定义了一个数组的名称、维数及数组元素的类型

int[] a;//推荐使用
int a[];

(此时仅在栈内存分配空间,并没有实例化对象,因此堆内存并未使用)
在这里插入图片描述

数组初始化

静态初始化

int[] a = {1,4,3,3,2,3,3};
//int类型数组
Boy[] b = {new Boy(18,180),new Boy(17,178)};
//引用类型数组,将Boy类实例化对象初始化给b数组

动态初始化

int[] c = new int[5];
c[0] = 233;
//先给数组分配空间,然后对各个元素赋值

初始化默认值

//初始化时会给每个元素赋予一个默认的值
int[] score = new int[2];//默认为0,0
String[] name = new String[2];//默认null,null
boolean[] chioce = new boolean[2];//默认false,false

(当数组类型为引用类型,默认值为null,当你访问其属性的时候,必须进行初始化,否则会报空指针异常)

在这里插入图片描述
在这里插入图片描述

数组的遍历

我们可以使用for循环来对数组进行动态初始化及元素的访问

public class Test {
    public static void main(String[] args) {
        int[] a = new int[4];
        //初始化数组元素的值
        for(int i=0;i<a.length;i++){
        //a.length可得到数组元素的个数
            a[i] = i;
        }
        //读取元素的值
        for(int i=0;i<a.length;i++){
            System.out.println(a[i]);
        }
    }
}

结果:
结果

增强for循环

对于数组,和含有一组元素的集合,可使用增强for循环进行遍历,但是在遍历时不能对数组元素进行修改

String[] str= {"aa","bb","cc","dd"};
for (String temp:str) {
			System.out.println(temp);
		}

结果:
在这里插入图片描述

二维数组

二维数组相当于在一维数组的基础上,每个元素中有一个一维数组

声明

int[][] a;
int b[][];

初始化

int[][] c = new int [3][];
//int[][] d = new int [][3];//错误
int [][] e = new int{
						{ 1, 2, 3 },
 						{ 3, 4 },
  						{ 3, 5, 6, 7 }
  						};//静态初始化
int d[0] = {1,2,3};//动态初始化
int d[1] = {2,1,5};

空间分配:
在这里插入图片描述
当学完数组的这些基本知识后,我不由产生了一个大胆的想法,能不能将不同类型的数据放到同一个数组中呢?
在这里插入图片描述
这时你一定会反驳我,不是一开始就讲明了数组的特性就是只能存放同一类型的元素?
我们先分析数组存放的原理,同一类型元素才能存于同一数组,我们做个比喻,将数据比作各种规则物体,整型为正方体,长整型则是更大的正方体,字符串为球体,根据数组的特点,把数组当做一个箱子,我们规定只有同样形状的物体能放进同样形状的箱子中。
在这里插入图片描述
这样似乎我们无法将不同类型元素放在一起。但是,我们知道Object是所有类的基本,所谓万物基于Object。我们的确不能将不同类型的元素放于一个数组,但是我们可以将不同类型的元素向下转型为Object,这样相当于所以元素的类型都变得“一样”了,自然可以存放于同一数组。

Object[] x1 = {1001,"A",18};
Object[] x2 = {1002,"B",17};
Object[] x3 = {1003,"C",19};
Object[][] tableData = new Object[3][];
table[0] = x1;
table[1] = x2;
table[2] = x3;

将数组打印结果如下:
在这里插入图片描述

数组工具类Arrays

在该类中封装了一些对数组操作的静态方法

sort方法排序

int[] num = {4,5,3,2};
for(int i:num) {
	        	System.out.print(i+",");
	        }
System.out.println();
Arrays.sort(num);
for(int i:num) {
	        	System.out.print(i+",");
	        }

结果:
在这里插入图片描述
toString方法将数组转换成字符串,可直接将数组输出

System.out.println(Arrays.toString(num));

直接将上面的num数组输出:
在这里插入图片描述
那么二维数组可以直接输出吗?我们进行尝试:

int[][] num2 = {{1,22,3},{4,8,0}};
System.out.println(Arrays.toString(num2));

结果:
在这里插入图片描述
显然是不行的,我们只能访问到数组的引用地址。这时候Arrays类提供了deepToString方法可以实现这一功能:

 System.out.println(Arrays.deepToString(num2));

结果:
在这里插入图片描述

注意:这里的toString()方法与类里面的toString方法重名,但是没有一点关系。

数组的复制

数组的复制是创建新的空间如何将数组复制过去
Arrays提供了两个静态方法:
copyOf(array,length)从被复制数组首位置开始,复制length长度
copyOfRange(array,start,end)从被复制数组start下标开始复制,到end结束(不包括end,所以是[start,end)左开右闭

int[] num3 = {1,2,3,4,5,6};
int[] num4 = Arrays.copyOf(num3, 2);
int[] num5 = Arrays.copyOfRange(num3, 2, 5);
System.out.println(Arrays.toString(num4));
System.out.println(Arrays.toString(num5));

结果:
在这里插入图片描述

  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值