-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
一、数组的概念
数组:同一种类型数据的集合,其实数组就是一个容器。
好处:可以给数组中的元素进行自动编号,从0开始,方便操作这些元素。
二、定义数组
1.定义数组的常见格式
格式1:元素类型[ ] 数组名 = new 元素类型 [ 元素个数或数组长度];
例:int[ ] arr = new int [3]; //定义名称为arr一个长度为3的数组
注:格式1的另一种写法: 元素类型 数组名[ ]= new 元素类型 [ 元素个数或数组长度];
格式2:元素类型 [ ] 数组名 = new 元素类型 { 元素1,元素2,元素3,........};
例: int [ ] arr = new int{1,2,3,4,5}; // 定义了名称为arr的数组,并且通过{}的形式,表示出了数组的元素的内容。
注:格式2也被称为静态初始化方式,它还有一种简化写法
元素类型[ ] 数组名 = {元素1,元素2,元素3,.........};
三、数组操作容易发生的异常
异常1:ArrayIndexOutOfBoundsException 角标越界异常。操作数组时,访问到了数组中不存在的角标。
异常2:NullPointerException 空指针异常。 当引用没有任何指向值为null的情况,该引用还在用于操作实体。
四、数组的常见操作汇总
1.获取数组中的元素:遍历
通过for循环,对数组进行遍历操作。
在数组中有一个属性,可以直接获取到数组中元素的个数。使用方式: 数组名 .length
例:int [ ] arr = {1,2,4,5,6,7};
for(int x = 0 ;x<arr.length;x++){
System.out.println(arr[x]);
} // 通过遍历操作将数组中的元素打印出来
2.获取最值(获取最大值、最小值)
思路:获取最值需要进行比较,每一次比较都会有一个较大(小)的,该值不确定,用一个临时变量进行存储。
让数组中的每一个元素和这个值进行比较,若果大(小)于该值,就将该变量记录较大(小)的值。
当所有的元素都比较过后,就完成了获取最值得操作。
3.数组的排序
数组的排序操作常用的有:选择排序、冒泡排序等。
3.1 选择排序
思路:将数组中的第一个元素与第二个元素进行比较,如果大于后面的值,就调换位置。
这样就将较小的元素放在了第一个位置上了,这是再继续用第一个位置的值与后面的比较。
这样第一次循环过后,我们就将整个数组中最小的值放到了数组的第一位也就是0角标位。
再通过上述操作对1角标位置的元素进行操作。如此循环,就可以给数组排序。
/*
选择排序。
内循环结束一次,最值出现头角标位置上。
*/
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[x]>arr[y])
{
int temp = arr[x];
arr[x] = arr[y];
arr[y]= temp;
}
}
}
}
3.2 冒泡排序
思路:相邻的两个元素进行比较,如果前一个值大于后一个值,就交换位置。
这时我们可以发现,经过循环后,值较大的都在往后移动,值较小的都在往前移动。
这样就可以实现排序。
/*
冒泡排序
*/
public static void bubbleSort(int[] arr)
{
for(int x=0; x<arr.length-1; x++)
{
for(int y=0; y<arr.length-x-1; y++)//-x:让每一次比较的元素减少,-1:避免角标越界。
{
if(arr[y]<arr[y+1])
{
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
}
}
}
}
4.数组的常见操作:查找
数组的查找:一般的思想是在给数组遍历的过程中,如果数组中的元素与目标元素相等,直接返回该元素的角标即可。
数组的查找还有另一种方式:折半查找。 但是折半查找有个前提:数组必须是有序的。
折半查找:
思路:1.先定义两个变量(int min ,int max ),一个初始化0角标,作为最小值,一个初始化为最后一个角标,作为最大值
然后还要定义个变量(int mid= (min+max)/2 ),作为中间值的位置。
2.用目标值与中间值进行比较,如果比中间值大,就将最小值变为中间值+1的位置,继续重复第一步操作,在进行比较,循环。
3.用目标值与中间值进行比较,如果比中间值小,就将最大值变为中间值-1的位置,继续重复第一步操作,在进行比较,循环。
<span style="white-space:pre"> </span>/*
折半查找。提高效率,但是必须要保证该数组是有序的数组。
*/
public static int halfSearch(int[] arr,int key)
{
int min,max,mid;
min = 0;
max = arr.length-1;
mid = (max+min)/2;
while(arr[mid]!=key)
{
if(key>arr[mid])
min = mid + 1;
else if(key<arr[mid])
max = mid - 1;
if(min>max)
return -1;
mid = (max+min)/2;
}
return mid;
}
1.二维数组的概念
二维数组可以理解为数组中的数组。也就是把数组作为元素存到数组当中。
2.二维数组的定义
格式1:元素类型[ ] [ ] 数组名 = new 元素类型 [一维数组的个数 ] [每个一位数组的长度 ] ;
例: int [ ] [ ] arr = new int [2 ] [3 ]; //定义了一个二维数组,里面有2个一维数组,每个一维数组长度是3.
格式2: 例: int [ ] [ ] arr = { {1,2,3},{4,2,1},{2,3,4}};
六、Arrays 类
Arrays类是专门用于操作数组的工具类。里面封装了可以操作数组的一系列静态方法。
常用部分方法例:
binarySearch(arr , temp); 二分查找。
copy of (); 复制数组
copyOfRange( arr, from, end); 复制数组的一部分(包含头不包含尾)
equals(); 比较两个数组的内容是否一样asList(); 将数组变成List集合
sort(); 对数组进行升序排序
toString(); 将数组变成字符串
由于Arrays中的方法都是static的,所以可以用类名直接调用。格式: Arrays . 方法名