Java中数组的简单使用
1.数组的基本概念
2.基本用法
(1)初始化
(2)三种遍历方法
(3)内存存储 栈与堆
(4)引用变量
(5)null
(6)作为返回值
3.数组与方法互操作
(1)数组转字符串 Arrays
(2)数组拷贝
(3)求数组中元素的平均值
(4)查找数组中指定元素(顺序查找)
(5)查找数组中指定元素(二分查找)
(6)数组逆序
(7)冒泡排序
(8)二维数组
数组的基本概念
数组:数组是一块连续的存储空间,存储的是相同数据类型的元素(通过数组,组织一些数据)
eg:
int a1=1;
int a2=2;
int a3=3;---->
int[ ] array={1,2,3};
float[ ] array={1.0f,2.5f};
数组的下标从0开始,与C语言一样,n-1结束
下标也称为索引,C语言下标越界是会给出一个随即值,Java中会直接报错(数组越界异常)。
索引范围【0,len-1】
数组的长度计算:
int len = array.length;
System.out.println(len);
数组的两种写法:
int[ ] array3 =new int[10];//只是分配了内存,但没有进行赋值,只有默认值
初始化
int[ ] array1;
array1=new int[10];
int[ ] array2;
array 2=new int[ ]{10,20,30};
数组的遍历
两
三种方法:
区别在于:for循环可以拿到数组的下标,foreach拿不到数组的下标
Arrays把数组转换成字符串,更方便打印
eg:初始化一个数组,存储1-100,并且打印出来
初级Java先关注栈和堆
如果直接打印的是数组名,打印出来的不是数组数据,而是其首元素的地址
下面从栈和堆的角度来理解Java中的内存存储
引用之间的赋值
eg1:
结果可以发现,只改变了array2 ,但是array2和array1的数据都发生了变化
array2这个引用指向的是array1所引用的对象
eg2:
结论:一个引用不能指向多个对象,一个对象可以被多个引用
注意:当引用不指向任何对象时 赋值为null,只要引用为空,对其的任何操作都是错误的(空指针异常)
eg: int[ ] array=null;
错误写法: int[ ] array=0; Java中null与0没有任何关系
eg:利用引用进行数组传参
func1有两个指向,只指向所存放地址的那个,即指向只有一次
func2指向只有一次,但它修改了指向对象里面的值
数组作为返回值
数组的传参
eg:交换数组中的两个元素
注意:引用变量目前是在main函数里的,它属于局部变量,当函数结束会被内存回收,对象的回收,是没有引用它的时候回收。
否则初始化一律用new
eg: int[ ] array=new int[ ]{1,2,3,4,5}
数组的练习
(1)数组转字符串 Arrays:如上 注意要拿返回值去接收它
eg:尝试自己定义一个数组转字符串的方法
(2)数组拷贝
1.int[ ] array2=Arrays.CopyOf(array,array.length);
补充:如果想扩容
int[ ] array2=Arrays.CopyOf(array,2*array.length);
2.System.arraycopy(原数组,开始拷贝的原数组的位置,新数组,开始拷贝的新数组的位置,要拷贝的长度);
可以局部拷贝,但需要注意不能越界。
3.int[ ] array2=Arrays.copyOfRange(要拷贝的数组名,从哪位拷贝,拷贝到哪位);
注意:Java中 from....to是左闭右开的,所以右边的范围取不到。
eg:from1.....to4 [1,4) 实际上取值第1,2,3位
4.array.clone();
5.自己写代码实现
思想:先建立一个与原先数组空间大小相同的内存,再一对一拷贝其数组中的元素。
(3)求数组中元素的平均值
(4)查找数组中指定元素(顺序查找)
(5)查找数组中指定元素(二分查找)
注意:二分查找需要一组数据按照升序排列,可以用Arrays.sort(array);
1.自己写代码完成
2.利用Java的 Arrays,binarySearch(array,key)
(6)数组逆序
(7)冒泡排序
(8)二维数组
二维数组的表示方法
int [ ] [ ] array1=new int[2] [3];
int [ ] [ ] array2=new int[ ] [ ] {{1,2,3},{4,5,6}};
int [ ] [ ] array3= {{1,2,3},{4,5,6}};
二维数组的打印
直接用Arrays.toString打印出来的是地址
1.可以用for循环打印,用Arrays.deepToString()打印
2.for循环 使用length时:
3. 用foreach接收
不规则的二维数组:可以省略掉列
eg: int[ ] [ ]array=new int [2] [ ];打印其会出现空指针异常
不规则数组可以让每一行的列数不一样
GuessingBlast: 无敌了,就是maven的问题。这博主真给力
CSDN-Ada助手: 推荐 算法 技能树:https://edu.csdn.net/skill/algorithm?utm_source=AI_act_algorithm
ii_112: 谢谢
CSDN-Ada助手: 推荐 Java 技能树:https://edu.csdn.net/skill/java?utm_source=AI_act_java
小梁说代码: 受益了,感谢博主!