【语言基础】java中的Array初始化、内存特征、遍历方式、数组扩容(合并与追加)、缩容(删除元素)、Arrays工具类

一、Array初始化

静态创建:

int[] array = {1,2,3};

动态创建:

int[] array = new int[60];

数组长度

int arrayL = array.length

二、Array内存特征

  • 栈内存(Stack):主要用于执行方法,工厂的生产车间
    ①临时的
    ②存储量相对较小的
    ③存放main()、基本类型变量、引用类型变量、方法函数

  • 堆内存(Heap):用于存储大量数据,工厂的原料仓库
    ①持久的
    ②存储量相对较大的
    ③存放由new创建的对象和数组

java程序执行时,首先将main函数载入栈内存,然后在栈内存中存放基本数据类型创建的变量(如int类型、float类型);而引用类型数据创建的变量存储的过程如下(以Array为例):

  1. 首先在堆内存中开辟出一段连续的空间,用于存储数组中的元素;
  2. 然后在栈内存中开辟空间存放存放该数组首元素的地址
  3. 因此在这里栈内存存储机制就是引用堆存储中的数据。

  • 数组一旦创建,长度不可变(因为堆内存中已经定好连续的存储地址,可能后面的地址已经存储了其他数据);
  • 数组存储数据增加和修改数据比较麻烦,但是根据索引查询数据非常快(查询算法为:目标元素的地址=首元素的地址+索引*数据长度),因此数据元素再多也能很快定位目标元素。

三、数组的遍历方式

  • for循环遍历,利用索引直接通过数组中元素的地址来进行查询、修改元素等操作。
for(int i =0;i<array.length;i++){
	System.out.println(array[i]);
}
  • foreach循环,挨个取出数组中的数据存入中间变量,简化了for循环,方便查询,但同时也无法直接更改原数组元素值。
for(int a : arr ){
	System.out.println(a);
}

四、数组扩容(合并和追加)、数组缩容(删除元素)

1.数组合并

  1. 对于arr1和arr2两个数组长度已经确定无法改变,因此需要创建arr3
int[] arr3 = new int[arr1.length+arr2.length];
  1. 将arr1和arr2分别追加到arr3中
        //往arr3中添加arr1
        for(int i =0;i<arr1.length;i++){
            arr3[i]=arr1[i];
        }

        //往arr3追加arr2
        for(int i = 0;i<arr2.length;i++){
            arr3[i+arr1.length]=arr2[i];
        }

2.往数组中追加元素、插入元素:思路同上,都是创建一个中间数组。(不能直接在原数组中添加,因为长度已经固定)

3.删除元素

  1. 移动元素位:快,省内存,但是会有空余位;
    数组删除元素1
  2. 创建新数组:更严谨:
    数组删除元素2

五、Arrays工具类

Arrays JRE中基本类库提供的一个数组工具类
封装了 排序、查找极值、遍历输出等操作。

  1. Arrays.sort(arr):排序arr数组,只能升序
    Arrays.toString(arr):返回arr字符串的表达形式(快速遍历数组)。
int[] arr = {23,5,3,42,45,1,28,32};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
[1, 3, 5, 23, 28, 32, 42, 45]
  1. Arrays.binarySearch(arr,key):在数组中快速的查询给定元素出现的位置,必须先将arr排序(因为使用二分算法),返回值为负数表示未查询到
int[] arr = {23,5,3,42,45,1,28,32};
//1.使用Arrays.binarySearch()需要先排序
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
[1, 3, 5, 23, 28, 32, 42, 45]
//2.在排序后的数组中查询
int index = Arrays.binarySearch(arr,45);
System.out.println("元素在数组中的索引"+index);
元素在数组中的索引7

二分算法查询效率高,思路如下(查找45,如果一个一个比对,需要8次,二分算法3次计算即可):
二分算法思路

  1. Arrays.copyof(): 复制数组
    堆内存中开辟了一段连续的地址存储arr,使用copyof就会再开辟一段新的连续的地址存储newArr,并将arr的数值赋给newArr。如果用newArr = arr直接复制,其实就是将arr存储的引用地址给了newArr,换言之,arr和newArr使用堆内存中的同一段连续地址
int[] arr = {23,5,3,42,45,1,28,32};
int[] newArr = Arrays.copyOf(arr,5);
System.out.println(Arrays.toString(newArr));
[23, 5, 3, 42, 45]
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值