数组的定义
1> 概念
同一种类型数据的集合。其实数组就是一个容器。
2> 数组的好处
可以自动给数组中的元素从0开始编号,方便操作这些元素。
3> 格式1:
元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
示例:int[] arr = new int[5];
---new 用于创建数组的关键字,在堆里开辟空间,如果:int[] att = arr; 那么arr att 都指向新开辟空间,如果定义 arr=null;的话表明把数组arr与实体空间断开连接,不影响att.
格式2:
元素类型[] 数组名 =new 元素类型[]{元素,元素,……};
int[] arr = new int[]{3,5,1,7};
int[] arr = {3,5,1,7}; //既明确了元素的个数又明确了元素的内容.
//获取数组元素格式的方式. 数组名.length
System.out.println("len:"+arr.length);
数组的内存结构
内存结构
Java程序在运行时,需要在内存中的分配空间。为了提高运算效率,有对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
栈内存
1> 用于存储局部变量,当数据使用完,所占空间会自动释放。
堆内存
1> 数组和对象,通过new建立的实例都存放在堆内存中。
2> 每一个实体都有内存地址值
3> 实体中的变量都有默认初始化值,不同类型初始值不同。int 0, double 0.0,char \u000,boolean false.
4> 实体不在被使用,会在不确定的时间内被垃圾回收器回收
方法区,本地方法区,寄存器
数组操作常见问题
1> 数组脚标越界异常(ArrayIndexOutOfBoundsException)
int[] arr = new int[2];
System.out.println(arr[3]); //编译时没有问题,运行时才去找实体,所以运行时才会报错.
访问到了数组中的不存在的脚标时发生。
2> 空指针异常(NullPointerException)
int[] arr = null;
System.out.println(arr[0]);
arr引用没有指向实体,却在操作实体中的元素时。
数组常见操作
1> 获取最值(最大值,最小值)
2> 排序(选择排序,冒泡排序)
3> 折半查找(二分查找)
~~~~~~~~~~~~~~~~~获取最值~~~~~~~~~~~~~~~~~~~~~
class ArrayDemo3
{
public static void main(String[] args)
{
/*
常见的数组的操作:
1,获取元素。遍历。
*/
int[] arr = {34,15,617,22,19,88};
// for (int x = 0; x
// {
// System.out.println("arr["+x+"] = "+arr[x]+";");//arr[0] = 34;
// }
// 测试最大值。
int max = getMax2(arr);
System.out.println("max="+max);
}
/*
2,获取最大值。
思路:
1,定义一个变量。
2,遍历数组,让每一个元素和该变量中的数据进行比较。
3,改变量每一次记录较大的值。遍历结束,该变量中存储的就是最大值。
*/
/*
需求:定义一个获取整数数组最大值的功能。
明确1:有结果吗?有,整数。最大值。
明确2:有未知内容吗?有,数组。
*/
public static int getMax(int[] arr)
{
//1,定义变量,记录较大的值。
int max = arr[0];//初始化是数组中的任意一个元素
//2,遍历数组。
for (int x=1; x
{
//3,进行判断比较。
if(arr[x]>max)
max = arr[x];
}
return max;
}
//第二种最大值。
public static int getMax2(int[] arr)
{
int maxIndex = 0;//初始化为数组中