-------android培训、java培训、期待与您交流! ----------
(1)存储同一种数据类型的多个元素的容器。
(2)数组的特点:
每一个元素都有编号,从0开始编号。
(3)数组的格式:
A:数据类型[] 数组名 = new 数据类型[元素个数];
例:int[] arr = new int[3];
创建了一个int数组,arr。可以存储3个int类型的元素。
和下面的定义的区别?
int arr[] = new int[3];
B:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};
举例:int[] arr = new int[]{1,2,3};
创建了一个int数组,arr。元素是1,2,3
C:数据类型[] 数组名 = {1,2,3};
举例:int[] arr = {1,2,3};
创建了一个int数组,arr。元素是1,2,3
(4)Java对它所占用的空间的内存分配:
A:栈 局部变量,在方法中定义的变量
B:堆 存储的都是new出来的实体
C:方法区 存储的都是方法
D:本地方法区 跟系统相关
E:寄存器 CPU使用,芯片运算
栈和堆的特点:
栈:栈中的数据必须初始化才能使用。当方法调用完毕,就从内存中消失。
堆:堆中的数据有默认值。
A:都有首地址
B:都有默认值
C:不在被引用指向的时候,会在jvm空闲的时候被回收。
(5)两个问题:
A:数组越界
访问了不存在的元素。
B:空指针
实体都没有了,你还使用实体访问元素。
(6)数组的常见操作:
数组有编号,它的操作都离不开编号。
java对数组还提供了一个属性:length 用于获取数组的长度
A:遍历
public static void printArray(int[] arr)
{
for(int x=0; x<arr.length; x++)
{
if(x==arr.length-1)
{
System.out.print(arr[x]);
}
else
{
System.out.print(arr[x]+",");
}
}
System.out.println();
}
B:获取最值
a:最大值
public static int getMax(int[] arr)
{
int max = arr[0];
for(int x=1; x<arr.length; x++)
{
if(arr[x]>max)
{
max = arr[x];
}
}
return max;
}
b:最小值
public static int getMin(int[] arr)
{
int min = arr[0];
for(int x=1; x<arr.length; x++)
{
if(arr[x]<min)
{
min = arr[x];
}
}
return min;
}
C:排序
a:选择排序
原理:从0开始依次和后面的比较,小的往前放,第一次完毕后,最小值出现在了最小索引处。
代码体现:
public static void selectSort(int[] arr)
{
for(int x=0; x<arr.length-1; x++)
{
for(int y=x+1; y<arr.length; y++)
{
if(arr[y]<arr[x])
{
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
}
}
b:冒泡排序
原理:相邻的元素两两比较,大的往后放,第一次完毕后,最大值出现在了最大索引处。
代码体现:
public static void bubbleSort(int[] arr)
{
for(int x=0; x<arr.length-1; x++)
{
for(int y=0; y<arr.length-1-x; y++)
{
if(arr[y]>arr[y+1])
{
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
}
}
}
}
D:查找
a:普通查找
代码体现:
public static int getIndex(int[] arr,int value)
{
int index = -1;
for(int x=0; x<arr.length; x++)
{
if(arr[x]==value)
{
index = x;
break;
}
}
return index;
}
b:二分查找(折半查找)
前提:数组必须有序(升序)。
代码体现:
public static int getIndex(int[] arr,int value)
{
int min = 0;
int max = arr.length-1;
int mid = (max+min)/2;
while(arr[mid]!=value)
{
if(value>arr[mid])
{
min = mid + 1;
}
else if(value<arr[mid])
{
max = mid - 1;
}
if(min>max)
{
return -1;
}
mid = (max+min)/2;
}
return mid;
}