----------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
虽然数组在各种电脑编程语言中的表示式略有不同,但是几乎每一种编程语言都有这种结构和观念,它已经不只是一种编程专用的术语,而是电脑运作中非常重要的技术和概念。这篇博客对java数组的一些知识做一个总结。
1.数组的定义
概念:数组是有序数据的集合,数组中的每个元素具有相同的数组名和下标来唯一地确定数组中的元素。数组就是用来存放参与运算的数据的方式。
用数组存放数据的好处:数组能自动给数组中的元素从0开始编号,方便操作。
数组的声明:
类型[] array;
类型 array[];
(备注:JAVA中推荐使用:类型[] array;)一个数组是一个对象,声明时不用指定长度。
创建数组:
创建基本数据类型数组:int[] i = new int [2];
创建引用数据类型数组:Student[] s = new Student[100];
注:创建时一定要指定长度
int[] i2 = new int[]; //error
初始化数组:
声明、创建、初始化分开:
int[] i; //定义数组
i = new int[2]; //分配空间
i[0] = 0; //初始化
声明、创建、初始化在同一时间:
int[] i = {0,1};//显示初始化{}中有几个值,则数组长度为几
访问数组时出现的一些异常:
ArrayIndexOutOfBoundsException:3 操作数组时访问到了数组中不存在的角标。
NullPointerException 空指针异常:当引用没有任何指向值为null的情况,该引用还在应用于实体。
2.数组的操作
获取数组中的元素(遍历):
class ArrayDemo
{
public static void main(String[] args)
{
//获取数组中的元素,通常会用到遍历。
int[] arr = {3,6,5,7,4,8};
//数组中有一个属性可以直接获取到数组的元素个数:length
//使用方式:数组名称.length=
for(int x=0;x<arr.length;x++)
{
System.out.println(“arr[”+”]=”+arr[x]+”;”)
}
}
}
获取数组的最值:
给定一个数组{5,1,6,4,2,8,9},获取数组的最大值。
/*1.定义变量,初始化为数组中任意一个元素即可。
2.通过循环语句对数组进行遍历
3.在变量过程中定义判断条件,如果遍历到的元素比变量中的元素大,就赋值给变量。
需要定义一个功能来完成,以便提高复用性。*/
class ArrayTest
{
public static int getMax(int[] arr)
{
int max = 0;//临时变量初始化为0,此时是在初始化为数组中的任意一个角标。
for(int x=1;x<arr.length;x++)
{
if(arr[x] > arr[max])
max = x;
}
return arr[x];
}
public static void main(String[] args)
{
int[] arr = {5,1,6,4,2,8,9};
int max = getMax(arr);
System.out.println(“max=”+max);
}
}
数组排序:
{5,1,6,4,2,8,9}
(1)选择排序:内循环结束一次,最值出现在0角标位。
class Arraytest
{
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])
{
swap(arr,x,y);
}
}
}
}
public static void swap(int[] arr,int a,int b)
{
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
public static void main(String[] args)
{
int arr = {5,1,6,4,2,8,9};
//排序前
printArray(arr);
//排序
selectSort(arr);
//排序后
printArray(arr);
}
public static void printArray(int[] arr)
{
System.out.print(“[”);
for(int x=0;x<arr.length;x++)
{
if(x!=arr.length-1)
System.out.print(arr[x]+”,”);
else
System.out.println(arr[x]+”]”);
}
}
}
(2) 冒泡排序:相邻的两个元素进行比较,如果符合条件换位。最值出现在最后位。
class Arraytest
{
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])
{
swap(arr,y,y+1);
}
}
}
}
public static void swap(int[] arr,int a,int b)
{
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
public static void main(String[] args)
{
int arr = {5,1,2,4,2,8,9};
//排序前
printArray(arr);
//排序
bubbleSort(arr);
//排序后
printArray(arr);
}
public static void printArray(int[] arr)
{
System.out.print(“[”);
for(int x=0;x<arr.length;x++)
{
if(x!=arr.length-1)
System.out.print(arr[x]+”,”);
else
System.out.println(arr[x]+”]”);
}
}
}
注:在真实开发中,java语言提供了一个排序功能。
Array.sort(arr);
数组的查找操作:
class ArrayTest
{
public static void main(String[] args)
{
int[] arr={3,2,1,5,4,2,9};
int getIndex = (arr,2);
System.out.println(“index=”+index);
}
//定义功能,获取key第一次出现在数组中的位置,如果返回是-1,那么代表该key在数组中不存在。
public static int getIndex(int[] arr,int key)
{
for(int x=0;x<arr.length;x++)
{
if(arr[x]==key)
return x;
}
return -1;
}
}
折半查找:提高效率,但是必须要保证该数组是有序的。
class ArrayTest
{
public static void main(String[] args)
{
int[] arr={2,4,5,7,19,32,45};
int halfSearch = (arr,32);
System.out.println(“index=”+index);
}
public static int halfSearch(int[] arr,intkey)
{
int min,max,mid;
min = 0;
max = arr.length-1;
mid = (max+min)/2;
while(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;
}
}
3.二维数组
其实就是一个一维数组,它的每一个元素又是一个一维数组。
int[][] i1 = new int[2][3];
int[][] i2 = new int[3][];
int[][] i3 = {{1,1,1},{2,2,2},{3,3,3}};
int[][] i4 = new int[][3];//不允许高维没分配空间而先给低维分配空间
int[][] i5 = new int[2][];
i5[0] = new int[3];
i5[1] = new int[2];
----------------------ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------