黑马程序员_03_java数组

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ---------------------- 

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

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

数组的两种定义格式:

1.元素类型 [] 数组名  = new 元素类型[ 元素个数或数组长度] 。

例:int [] arr = new arr[5];



2.元素类型[] 数组名 = new 元素类型[]{元素,元素,元素,……元素};

例: int [] arr = new int[]{3,5,1,7};

int [] arr={3,5,1,7}

这中格式可以直接将数组的内容在创建时就已经赋值。

数组操作常见问题

角标越界异常:操作数组时,访问到了数组不存在才角标。

空指针异常:当引用没有任何指向值为null的情况,该引用还在用于操作实体。

数组遍历

数组中有一个属性可以直接获取到数组元素个数。length.

使用方式:数组名称.length =

System.out.println("length:"+arr.length);

但凡用到遍历时,一般都要用到for循环。

例:int [] arr = new int[]{3,5,1,7};

for(int i=0;i<arr,length;i++){

System.out.println(arr[i]);

}

获取数组中的最值?

个人思路:设置一个空间,遍历数组,将每一个数组都进行比较,最值留在空间内,遍历完剩下的值就是最值。

老师思路:

1,获取最值需要进行比较。每一次比较都会有一个较大的值。因为该值不确定。

      通过一个变量进行临储。

2,让数组中的每一个元素都和这个变量中的值进行比较。

      如果大于了变量中的值,就用该该变量记录较大值。

3,当所有的元素都比较完成,那么该变量中存储的就是数组中的最大值了。

步骤:

1,定义变量。初始化为数组中任意一个元素即可。

2,通过循环语句对数组进行遍历。

3,在变量过程中定义判断条件,如果遍历到的元素比变量中的元素大,就赋值给该变量;

需要定义一个功能来完成。以便提高复用性。

      1,明确结果,数组中的最大元素 int。

      2,未知内容:一个数组。int[]

数组的排序

选择排序:

原理:将第一个数组的值与后面的比较,最小放在第一个位置上,然后用第二个遍历,遍历完就是从小到大排列的。

定义这个函数功能:

1,        有没有返回值类型?

没有,因为当数组排序完成以后,堆内存中的数组已经排序,直接调用即可。

2,        有没有未知参数:需要被排序的数组

例:

 public void selectSort(int [] arr){

		for(int x=0;x
    
    
     
     arr[y]){

					arr[x]=arr[x]+arr[y];

					arr[y]=arr[x]-arr[y];

					arr[x]=arr[x]-arr[y];

				}

			}

		}

}

    
    

冒泡排序:

相邻两个元素进行比较,如果符合条件,就换位。

特点:第一圈的最值出现在最后位。

堆内存中不断的转换会消耗较多的内存,如果把数组值放在栈内存中,比较完以后再在堆内存中一次转换位置,这样比较节省内存。

Java中util包中的Array.sort()函数直接提供最优的排序方法。

位置置换功能的抽取

发现无论什么排序。都需要对满足条件的元素进行位置置换。

所以可以把这部分相同的代码提取出来,单独封装成一个函数。

      public static void swap(int[] arr,inta,int b)

      {//注意这里必须是3个未知参数,因为要置换2数组值,所以要有数组这个未知参数

           int temp = arr[a];

           arr[a] = arr[b];

           arr[b] = temp;

      }

数组的查找操作:

折半查找:可以提高效率,但是前提是数组必须是有序的。

查表法:

查表法:将所有的元素临时存储起来。建立对应关系。

           每一次&15后的值作为索引去查建立好的表。就可以找对应的元素。

           这样比 -10+'a'简单的多。

可以通过数据的形式来定义。

      发现终于出结果了。但是是反着的。想要正过来呢?可以通过StringBuffer reverse功能来完成。但是这个工具还没有学习。所以可以使用已经学习过的容器:数组来完成存储。

二维数组:

int[] arr = newint[3];//一维数组。

int[][] arr =new int[3][4];//定义了名称为arr的二维数组。二维数组中有3个一维数组。每一个一维数组中有四个元素。

int[][] arr =new int[3][];

arr是一个二维数组,但是arr[0]这个数组没有定义,所以如果打印的话为null。Arr[1]arr[2]都是null。可以手动初始化

arr[0] = newint[3];

arr[1] = newint[1];

arr[2] = newint[2];

System.out.println(arr.length);//打印是二维数组的长度 3;

System.out.println(arr[0].length);//打印二维数组中第一个一维数组长度

int[][] arr ={{3,5,1,7},{2,3,5,8},{6,1,8,2}};//另一个初始化方式

int [] x,y[]//这样定义,x是一维数组,y是二维数组



------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值