run_wind

导航

黑马程序员——JAVA基础之数组

 

 

 

数组:

数组的定义: 数组是相同类型数据的集合, 描述的是相同类型的若干个数据按照一定的先后顺序排列组合而成,其中每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们。 

优点:可以自动给数组中的元素从0开始编号,方便操作这些元素。

 

数组的四个基本特点:

1.长度固定,一旦被创建它的长度就是不可改变的;

2.其元素类型必须是相同类型,不允许出现混合类型;

3.数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型;

4.数组发量属亍引用类型,数组也可以看做是对象,数组中的每个元素相当于该对象的成员发量,数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组本身是在堆中的。

 

数组的拷贝:System.arrayCopy(源数组,从哪开始,目标数组,从哪开始贴,粘几个) 。
数组排序:Arrays.sort(被排序的数组) 。
二分法查找:Arrays.binarySearch(哪个数组,数组中的什么元素) 。
填充:Arrays.fill(a, 2, 4,100) 。//将数组a中2到4的索引的元素替换为100 

 

格式1:
元素类型[] 数组名
= new 元素类型[元素个数或数组长度];
示例:int[] arr = new int[5];


 

格式2:
元素类型[] 数组名
= new 元素类型[]{元素,元素,……};
int[] arr = new int[]{3,5,1,7};
int[] arr = {3,5,1,7};

 

1.数组操作常见问题

数组脚标越界异常(ArrayIndexOutOfBoundsException)
int[] arr = new int[2];
System.out.println(arr[3]);
访问到了数组中的不存在的脚标时发生。


空指针异常(NullPointerException)
int[] arr = null;
System.out.println(arr[0]);

 

 

2.数组常见操作

获取最值(最大值,最小值)
排序(选择排序,冒泡排序)
折半查找(二分查找)

获取数组中的元素。通常会用到遍历。

 

/**
 * 数组遍历问题,要求打印数组中的所有数 
 * 给定一个数组,输出最大最小值 
 *
 */
public class CharDemo
{
	public static void main(String [] args)
	{
		int[] arr = {3,2,4,5,6,7,8};
		printArrary(arr);
		arraryMax(arr);
		arraryMin(arr);
	}
	
	//函数功能:遍历数组,并打印
	public static void printArrary(int[] arr)
	{
		System.out.print("[ ");
		for (int i=0;i<arr.length;i++)
		{
			
			if (i!=arr.length-1)
				System.out.print(arr[i]+",");
			else
				System.out.println(arr[i]+" ]");
		}
	}
	
	//函数功能:打印数组最大值
	//因为设定0角标元素为最值所以不用和自己比较,从1角标开始遍历比较就可以
	public static void arraryMax(int[] arr)
	{
		int max = arr[0];
		for (int i=1;i<arr.length;i++)
		{
			if (arr[i]>max)
				max = arr[i];
		}
		System.out.println("[ "+max+" ]");
	}
	
	//函数功能:打印数组最小值
	public static void arraryMin(int[] arr)
	{
		int min = arr[0];
		for (int i=1;i<arr.length;i++)
		{
			if (arr[i]<min)
				min = arr[i];
		}
		System.out.println("[ "+min+" ]");
	}
}


 

/**
 * 排序的演示
 * 		选择排序
 * 		冒泡排序
 * 
 */
public class SortDemo 
{
	public static void main(String [] args)
	{
		int[] arr = {3,2,5,4,6,7,8,9,1};
		selectSort(arr);
		printArrary(arr);
		bubbleSort(arr);
		printArrary(arr);
	}
	
	//数组内两个数换位
	public static void swap(int[] arr,int x,int y)
	{
		int temp;
		temp =arr[x];
		arr[x] = arr[y];
		arr[y] = temp;		
	}
	
	//按照格式遍历打印。
	public static void printArrary(int[] arr)
	{
		System.out.print("[ ");
		for (int t=0;t<arr.length;t++)
		{
			if (t!=arr.length-1)
				System.out.print(arr[t]+",");
			else
				System.out.println(arr[t]+" ]");
		}
	}
	
	//给数组由小到大顺序排序,顺序排序
	public static void selectSort(int[] arr)
	{
		for (int n=0;n<arr.length-1;n++)
		{
			for (int m=n+1;m<arr.length;m++)
			{
				if (arr[m]<arr[n])
					swap(arr,n,m);
			}
		}
	}
	
	//给数组由大到小排序,冒泡排序
	public static void bubbleSort(int[] arr)
	{
		for (int i=0;i<arr.length-1;i++)
		{
			for(int c=0;c<arr.length-i-1;c++)
			{
				if (arr [c]<arr [c+1])
					swap(arr,c,c+1);
			}
		}
	}
}


 

/**
 * 
 * 数组角标和查找等练习
 *
 */
public class SearchDemo 
{
	public static void main(String[] args)
	{
		int[] arr = {1,2,3,4,6,7,8};
		System.out.println(getArrary(arr,4));
		System.out.println(getIndex(arr,5));
		System.out.println(getArrary(arr,6));
	}
	
	//定义一个函数,查找数组中某一数角标,返回数第一次出现的时候的角标 
	public static int getArrary(int[] arr,int key)
	{
		for (int i=0;i<arr.length;i++)
		{
			if (arr[i]==key)
				return i;
		}
		return -1;
	}
	
	//折半查找,只应用于有序数组
	//java类库中定义了折半查找方法,开发时找API  Arrarys.binarySearch(arr,4);
	public static int halfSearch(int []arr,int key)  
    {  
        int min,mid,max;  
        min=0;  
        max=arr.length-1;  
        mid=(min+max)/2;  
        while (arr[mid]!=key)  
        {  
            if (key>arr[mid])  
            {  
                min=mid+1;  
            }  
            else if(key<arr[mid])  
                max=mid-1;  
  
            mid=(min+max)/2;  
        }  
        return mid;  
    }  
	
	//插入一个数到一个有序数组中,保持这个数组的有序
	public static int getIndex(int[] arr,int key)  
	{  
		int min = 0,max = arr.length-1,mid;  
	  
	    while(min<=max)  
	    {  
	    	mid = (max+min)>>1;  
	  
	    	if(key>arr[mid])  
	        	min = mid + 1;  
	    	else if(key<arr[mid])  
	        	max = mid - 1;  
	    	else  
	        	return mid;  
		}  
	 	return min;  
	}  
}


 

二维数组

 

格式1:int[][] arr = new int[3][2];
 定义了名称为arr的二维数组
 二维数组中有3个一维数组
 每一个一维数组中有2个元素
 一维数组的名称分别为arr[0], arr[1], arr[2]
 给第一个一维数组1脚标位赋值为78写法是:arr[0][1] = 78;


 

格式2:int[][] arr = new int[3][];
 二维数组中有3个一维数组
 每个一维数组都是默认初始化值null
 可以对这个三个一维数组分别进行初始化
arr[0] = new int[3];
arr[1] = new int[1];
arr[2] = new int[2];

 

 

 

 

 

 

 

 

 

posted on 2014-11-22 16:13  run_wind  阅读(142)  评论(0编辑  收藏  举报