zoukankan      html  css  js  c++  java
  • 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,谢谢关注。
  • 相关阅读:
    PDF文件中的Form保存问题
    Understanding IP Fragmentation
    tcp ip guide IPsec IKE
    Windows安全事件日志中的事件编号与描述
    Cisco PIX fix up and Juniper firewall FTP ALG
    很好的IPSec介绍,详细解释了IKE协商的2个阶段的作用
    virtualbox 下运行Ubuntu 8.10的分辨率和guest additions的问题。
    Fixing the ‘Do you want to display nonsecure items’ message
    windows xp 开始菜单里面所有项目右键不起作用。
    HP backup and recovery manager
  • 原文地址:https://www.cnblogs.com/vector121/p/7459328.html
Copyright © 2011-2022 走看看