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


    ------- android培训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];

    ------- android培训java培训、期待与您交流! ---------- 

  • 相关阅读:
    base64解码
    字典排序之后md5
    python 如何将列表多个字符串拼接成一个字符串
    Mongodb $setOnInsert操作符 和upsert:true
    为了不复制粘贴,我被逼着学会了JAVA爬虫
    10-序列化
    【开发笔记】- 停止MySQL正在执行的SQL语句
    【算法练习】- 百钱百鸡
    volatile与synchronized的区别与作用
    记录一次使用OSS而引发的关于maven的问题
  • 原文地址:https://www.cnblogs.com/runwind/p/4212212.html
Copyright © 2020-2023  润新知