Java深入数组

Java深入数组

1、数组概念

数组就是存储数据长度固定的容器,保证多个数据的数据类型要一致

2、数组的初始化

Java语言中数组必须先初始化才能使用,所谓初始化就是为数组的数组元素分配内存空间,并为每个数组元素赋初始值。一旦数组的初始化完成,数组在内存中所占用的空间将被固定下来,即数组的长度不可改变。

2.1、动态初始化

指定数组的长度:

int size = 10;
type[] arrayName = new type[size]; //推荐使用这一种,可读性较好
arrayName type[] = new type[size];
2.2、静态初始化

指定数组的内容:

int[] arr = new int[]{1,2,3,4,5};
int[] arr = {1,2,3,4,5};
注意:不要同时使用静态初始化与动态初始化,即不要在数组初始化时既指定数组长度又给每个数组元素分配初始值。
2.3、初始化填充数组
int[] arrName = new int[5];
Arrays.fill(arrName, 1);    // [1, 1, 1, 1, 1]
2.4、数组元素各类型初始值

基本类型中的整数类型(byte,short,int,long):0

基本类型中的浮点类型(float,double):0.0

基本类型中的字符类型(char):‘\u0000’

基本类型中的布尔类型(boolean):false

引用类型(类,接口,数组):null

3、数组的使用

数组最常用的方法就是访问数组元素:

arrayName[index];   //数组的索引从0开始
ayyayName[0] = 10;  //为0位置赋值10
int len = arrayName.length;      //获取数组的长度
int len2 = arrayName[0].length;  //获取二维数组第一维的第一个数组长度
4、数组的foreach循环

Java5之后可以进行foreach循环遍历数组和集合;

String[] names = {"Fe","Tom","Hxy","Ajax"}
for(String name : names){
    System.out.println(name);
}
/*
output : Fe
    	 Tom
    	 Hxy
    	 Ajax
*/    

当使用foreach循环迭代访问数组时,foreach中的循环变量相当于一个临时变量,系统会把数组元素依次赋值给这个临时变量,而这个临时变量并不是数组元素,它只是保存了数组元素的值。

所以如果想改变数组的元素值,则不能使用foreach循环。

String[] names = {"Fe","Tom","Hxy","Ajax"}
for(String name : names){
    name = Fee;
    System.out.println(name);
}
System.out.println(names[0]);
/*
output : Fee
    	 Fee
    	 Fee
    	 Fee
    	 Fe
*/  
5、内存中的数组

数组是一种引用数据类型,数组引用变量只是一个引用,数组元素数组变量在内存里时分开存放的。

public static void main(String[] args) {
	int[] a = {25,4,45,21,7};
	int[] b = new int[3];
	System.out.println(a);    //输出的是数组在内存中的地址
	System.out.println(a[2]); //0
}

数组在内存中的存储示意图

程序的执行流程:

  1. main方法进入方法栈执行
  2. 创建数组,JVM会在堆内存中开辟空间,存储数组
  3. 数组在内存中会有自己的内存地址,以十六进制数表示
  4. 对于b,数组中有个元素,默认值为0
  5. JVM将数组的内存地址赋值给引用类型变量b
  6. 变量b保存的是数组内存中的地址,而不是一个具体数值,因此称为引用数据类型。
//让b的引用指向a引用指向的数组
b = a;

b引用指向a引用所指向数组后的存储示意图

6、Java8工具类Arrays

Java提供的Arrays类里包含的一些static修饰的方法可以直接操作数组,这个Arrays类里包含了如下几个static修饰的方法(static修饰的方法可以直接通过类名调用)。

type[] copyOf(type[] original, int length);
//这个方法将会把 original数组复制成一个新数组,其中,length是新数组的长度。
//如果length大于original数组的长度,则新数组的前面元素就是原数组的所有元素,后面补充0(数值类型)、false(布尔类型)或者null(引用类型)。
type[] copyOfRange(type[] original, int from, int to);
//这个方法与前面方法相似,但这个方法只复制original数组的from索引到to索引的元素。
boolean equals(type[]a, type[]a2);
//如果a数组和a2数组的长度相等,而且a数组和a2数组的数组元素也一一相同,该方法将返回true。
void fill(type[]a, type val);
//该方法将会把a数组的所有元素都赋值为val。
void fill(type[] a, int fromIndex, int toIndex, type val);
//该方法与前一个方法的作用相同,区别只是该方法仅仅将a数组的fromIndex到 toIndex索引的数组元素赋值为 val。
void sort(type[] a);
//该方法对a数组的数组元素进行排序。
void sort(type[] a,int fromIndex,int toIndex);
//该方法与前一个方法相似,区别是该方法仅仅对fromIndex到toIndex索引的元素进行排序。
String toString(type[] a);
//该方法将一个数组转换成一个字符串。该方法按顺序把多个数组元素连缀在一起,多个数组元素使用英文逗号(,)和空格隔开。
XxxStream stream(xxx[] array);
//该方法将数组转换为Stream,Stream是Java8新增的流式编程的API。
XxxStream stream(xxx[]array, int startInclusive, int endExclusive);
//该方法与上一个方法相似区别是该方法仅将fromIndex到toIndex索引的元素转换为Stream。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值