黑马程序员----java学习笔记之数组知识点

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


1、java内存结构分为栈、堆、方法区、本地方法区、寄存器等!各结构功能如下:

        Java内存结构:
                栈内存:用于存储局部变量,当数据使用完,所占空间会自动释放。
                堆内存:数组和对象,通过new建立的实例都存放在堆内存中。
                方法区:静态成员、构造函数、常量池、线程池
                本地方法区:window系统占用
                寄存器:~~


2、堆内存中的数据都有默认初始化值,而局部变量在使用前就必须被赋值。

       

3、创建数组的两种方式:

        1):

int[] arr = new int[3];
       2):

int[] arr = new int[]{3,5,2,1,9};

也可简化为:


int[] arr = {3,5,2,1,9};


4、当数组角标越界时,编译可通过,运行时才报错!这说明,在编译的时候,并没有在堆中创建数组的实体,这个时候只检查语法上的错误。

运行时的报错信息为:

5、冒泡排序:

运算结果为:

6、折半查找(二分查找)

public static int halfSearch(int[] arr, int key)
	{
		int min = 0;
		int max = arr.length -1;
		int mid = (max+min)/2;
		
		while( arr[mid] != key )
		{
			if(arr[mid] > key)
				max = mid - 1;
			else
				min = mid + 1;
			
			if( min > max )
				return -1;
			mid = (max + min)/2;
		}
		return mid;
	}

折半查找的第二种写法:


public static int halfSearch(int[] arr, int key)
	{
		int min = 0;
		int max = arr.length -1;
		int mid = (max+min)/2;
		
		while( min <= max )
		{
			if(arr[mid] > key)
				max = mid - 1;
			else if(arr[mid] < key)
				min = mid + 1;
			else
				return mid;
			mid = (max+min)/2;
			
		}
		return -1;
	}

7、个人认为视频中提供的进制转换特别的好:

package com.day02;

public class ArrayTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		toBin(-6);
		toOct(9);
		toHex(60);
		
	}
	public static void toBin(int num)
	{
		 trans(num,2,1);
	}
	public static void toOct(int num)
	{
		  trans(num,8,3);
	}
	public  static void  toHex(int num)
	{
		  trans(num,16,4);	
	}

	private  static void trans(int num,int base,int offset)
	{
		char[] chs = {'0','1','2','3'
				      ,'4','5','6','7'
				      ,'8','9','a','b'
				      ,'c','d','e','f'
				     };
		char[] arr = new char[32];
		int pos = arr.length;
		
		while( num != 0 )
		{
			int temp = num & (base-1);
			arr[--pos] = chs[temp];
			num = num>>>offset;
		}
		for( int i = pos; i < arr.length; i++ )
			System.out.print(arr[i]);
		System.out.println();
	}
}

运算结果为:


8、java中二维数组中的一个小知识点,先看代码:

               int[][] arr = new int[3][4];
		System.out.println(arr);
		System.out.println(arr[0]);
运算的结果是:

根据运算结果可知,前面"["的个数表示数组的维数;

另一段代码:

                int[][] arr = new int[3][];
		System.out.println(arr);
		System.out.println(arr[0]);

注意,第二段代码的第2个输出结果为null。根据讲解,我认为引用数据类型不单单可以存储在栈中,还可以存储在堆中。示例中的arr是一个引用数据类型,arr[]也是一种引用数据类型。

9、二维数组arr[][],

        arr.length是二维数组的行数;

        arr[i].length是二维数组第i行的元素个数;

下面是示例代码:

int[][] arr = {{56,89,23}
						,{15,96,11,2}
						,{78}};
		System.out.println(arr.length);
		System.out.println(arr[0].length);
		System.out.println(arr[1].length);
		System.out.println(arr[2].length);
运行的结果是:







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值