• Java学习个人备忘录之数组


    数组

    概念:同一种类型数据的集合,其实数组就是一个容器.

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

    格式1:元素类型[] 数组名 = new 元素类型[元素个数];

    格式2:元素类型[] 数组名 = new 元素类型[]{元素1,元素2,元素3,....,元素N};


    内存的划分:
    1:寄存器
    2:本地方法区
    3:方法区
    4:栈内存
      存储的都是局部变量
      而且变量所属的作用域一旦结束,该变量就自动释放
    5: 堆内存
    存储的是数组和对象(其实数组就是对象) 凡是new 建立的都在堆中.
    特点:
    1.每一个实体都有首地址值
    2.堆内存中的每一个变量都有默认初始化值,根据类型的不同而不同.

    class ArrayDemo
    {
    	public static void main(String[] args)
    	{
    		int[] arr = new int[3];
    		System.out.println(arr(3)); //ArrayIndexOutOfBoundsException
    		//当访问到数组中不存在的角标时,就会发生该异常.
    
    
    		arr = null;
    		System.out.println(arr[0]);//NullpointerExeception
    		//当引用变量没有任何实体指向时,还在用其操作实体,就会发生该异常.
    	}
    }

    对数组操作最基本的动作就是存和取。
    核心思想:就是对角标的操作。

    常见数组应用算法

    数组遍历

    int[] arr = {89,34,280,15};
    for (int x = 0; x<arr.length ; x++ )
    {
    	System.out.println(arr[x]);
    }


    数组最值

    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;
    }
    //第二种方法
    public static int getMax(int[] arr)
    {
    	//定义变量记录较大的值
    	int max = 0;
    	for (int x=1; x<arr.length ; x++ )
    	{
    		if(arr[x]>arr[max])
    		{
    			max = x;
    		}
    	}
    	return arr[max];  //这里返回的最大值的角标
    }


    选择排序

    public static void selectSort(int[] arr)
    {
    	for (int x=0; x<arr.length ; 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;
    			}
    		}
    	}
    }


    冒泡排序

    /*
    内循环:
    -1: 为了避免角标越界
    -x: 为了让外循环增加一次,内循环参数与比较的元素个数递减.
    */
    for (int x=0; x<arr.length ; 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;
    		}
    	}
    }
    // 方法二:
    for (int x=arr.length-1; x>0 ; x-- )
    {
    	for (int y=0; y<x ; y++ )
    	{
    		if (arr[y]>arr[y+1])
    		{
    			int temp = arr[y];
    			arr[y] = arr[y+1];
    			arr[y+1] = temp;
    		}
    	}
    }


    查找: 返回数组的角标

    public static getIndex(int[] arr,int value)
    {
    	for (int x=0; x<arr.length ; x++ )
    	{
    		if (arr[x] == key)
    		{
    			return x;
    		}
    	}
    	return -1;
    }


    进制转换 10->16

    public static void toHex(int num)
    {
    	for (int x=0; x<8 ; x++ )
    	{
    		int temp = num & 15;
    		if (temp>9)
    			System.out.print((char)(temp-10+'A'));
    		else
    			System.out.print(temp);
    			num = num >>> 4;
    	}
    }


    什么时候使用数组呢?
    如果数据出现了对应关系,而且对应关系的一方是有序的数字编号,并作为角标使用。这时就必须要想到数组的使用。

    就可以将这些数据存储到数组中,根据运算的结果作为角标直接去查数组中对应的元素即可。
    这种方式: 称为查表法.

    public static void toHex_1(int num)
    {
    	// 定义一个对应关系表
    	char[] chs = {'0','1','2','3',
    	'4','5','6','7',
    	'8','9','A','B',
    	'C','D','E','F'};
    
    	for(int x=0; x<8; x++)
    	{
    		int temp = num & 15;
    		System.out.println(chs[temp]);
    		num = num >>> 4;
    	}
    }//但是这个方法显示出来的写过是反着的
    
    public static void toHex_2(int num)
    {
    	if (num == 0)
    	{
    		System.out.println("0");
    		return;
    	}
    	//定义一个对应关系表
    	char[] chs = {'0','1','2','3',
    	'4','5','6','7',
    	'8','9','A','B',
    	'C','D','E','F'};
    	/*
    	一会查表会查到比较多的数据
    	数据一多,就先存储起来,在进行操作.
    	所以定义一个数组---临时容器.
    	*/
    	char[] = arr = new char[8];
    	int pos = arr.length;
    
    	while(num != 0)
    	{
    		int temp = num & 15;
    		arr[--pos] = chs[temp];
    		num = num >>> 4;
    	}
    
    	System.out.println("pos=" + pos);
    	for (int x = pos; x<arr.length ; x++ )
    	{
    		System.out.println(arr[x] + ",");
    	}
    }
    


    二维数组定义的格式

    class Array2Demo
    {
    	public static void main(String[] args)
    	{
    		int[][] arr = new int[3][2]; //这就是二维数组的定义格式.
    		//该数组中有3个大箱子,每个大箱子中有2个小箱子
    
    		System.out.println(arr); //[I@15db9742   @左边是实体的类型.   @右边是实体的哈希值.
    		System.out.println(arr);//直接打印二维数组
    		System.out.println(arr[0]); //直接打印二维数组中角标0下面的一维数组
    
    		/*********************************************************************/
    
    		int[][] arr = new int[3][];
    		arr[0] = new int[2];
    		arr[1] = new int[1];
    		arr[2] = new int[3];
    		//分别对二维数组中的每一个小数组进行初始化.
    
    		/**********************************************************************/
    
    		int[][] arr = new int[3][2];
    		System.out.println(arr.length); //打印二维数组的长度,其实就是一维数组的个数
    		System.out.println(arr[1].length);
    
    		/***********************************************************************/
    
    		//第二种定义方式
    		int[][] arr = {{8,3,6},{7,4,9},{3,0,7}};
    		int sum = 0;
    
    		//遍历二维数组
    		for (int x=0; x<arr.length ; x++ )
    		{
    			for (int y=0; y<arr[x].length ; y++ )
    			{
    				System.out.println(arr[x][y]+",");
    				sum += arr[x][y];
    			}
    		}
    		System.out.println("sum="+sum);
    	}
    }
    
    我是Vector,谢谢关注。
  • 相关阅读:
    html$css_day05
    html$css_day04
    html$css_day03
    html$css_day02
    html$css_day01
    日常笔记19/3/04-19/3/10
    堆排序
    js对象之XMLHttpReques对象学习
    前端页面显示问题解决步骤(方法)
    SpringBoot跨域小结
  • 原文地址:https://www.cnblogs.com/vector121/p/7459328.html
Copyright © 2020-2023  润新知