黑马程序员————java基础----数组
2015-03-18 23:49
155 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流!
-------
数组
一、数组介绍
数组就相当于一个容器,里面存放相同数据类型的数据。和集合的最大区别是:数组长度固定。
二、数组初始化格式
①int[] arr=new int[3];//表示该数组存放了3个int类型的数据
这会有默认初始化值,均为0;String类型的为null。
③int[] arr=new int[]{3,5,6};//该数组存了3个int类型值。
②int[] arr={1,2,4,6};//表示数组里面有4个int类型是值,分别是1,2,4,6
注意:要么指明数组的大小,要么指明数组的值,长度和值不能同时出现。
数组越界问题:
int[] arr=new arr[3];
system.out.println(arr[3]);
当数组下标超过数组长度减1(arr.length()-1)时,编译不会出错,但是当运行时,要为数组分配空间,这
时数组并不存在该角标的值,会报告ArrayIn
4000
dexOutOfBoundsException异常
空指针异常:
int[] arr=null;
system.out.println(arr[1]);
这时报告空指针NullPointException异常.
原因在于:引用没有指向任何值,但却还在操作实体。
三、数组遍历
数组的长度:int length= arr.length();数组的角标都是从0开始,因此数组最后一个值的角标是length-1。
四、数组常见操作
a.
打印:system.out.println(arr);
打印结果:[I@de6ced
分析结果:这代表是数组类型的引用,你面存放int型数据。de6ced表示哈希值,即数组存放的内存地址。
b.获取数组中元素的最值
思路:1.获取最值,需要进行比较,由于最值不知道,因此定义一个临时变量max赋值上0角标或者是数组第一 个元素。
2.遍历数组,取得数组中每一个值,然后和max进行比较,若大于max ,那么将max赋上新值,否则 max不变。
3.数组元素都比较完了最后的max 就是该数组最大值。
![](https://img-blog.csdn.net/20150319195122751)
五、数组排序
a.选择排序
图例:
![](https://img-blog.csdn.net/20150319200204239)
特点:先取得数组中第一个元素和后面所有元素进行比较,如大于后面的数,就互换位置。
再取第二个元素和数组后面所有元素比较
每一轮比较完后,都会产生一个最小值在数组头角标上。
这是一个嵌套循环。
代码实现:
b.冒泡排序
图例:
![](https://img-blog.csdn.net/20150319201800435)
特点:相邻两个元素进行比较,如果符合条件,就进行换位。
小值往前,大值往后。
一圈完成后,最大值在最后,所有第二圈最后一值可以不参加比较。
代码实现:
b.当数组元素较多时,要考虑排序的效率和性能。
c.在堆内存中换位置是比较消耗资源。因此做好是先把要换位置的元素角标在栈内存中记录下来,当比较完后,最后在换位置。
d.不管是选择排序还是冒泡排序,都用到了位置置换,那么可以把此功能封装函数,以便复用。
六、进制转换
a.十进制-二进制
原理:除2模2的过程。
结果是要倒叙的,才符合二进制。
代码体现:
b.十进制-十六进制
原理:先拿数与上15,然后进行右移4的操作。(无符号右移>>>高位补上0)
图例:
![](https://img-blog.csdn.net/20150319204808656)
代码体现:
c.查表法
原理:将所有元素临时存储起来,并建立好联系。每次与上15之后的值作为索引取查之前建立好的表,然后获得对应的元素。
补充:字符数组初始化的值是"\u0000",就是一个空格。
代码体现:
d.封装函数(进制转换)
七、二维数组
概述:二维数组可以看出是一维数组,只不过该数组中存放的元素是数组。
初始化:int[][] arr=new int[2][];//数组的行数一定要指定,能省略的是列数。
原理:二维数组存放的是数组的引用。每个实体都有地址值。
图例:
-------
数组
一、数组介绍
数组就相当于一个容器,里面存放相同数据类型的数据。和集合的最大区别是:数组长度固定。
二、数组初始化格式
①int[] arr=new int[3];//表示该数组存放了3个int类型的数据
这会有默认初始化值,均为0;String类型的为null。
③int[] arr=new int[]{3,5,6};//该数组存了3个int类型值。
②int[] arr={1,2,4,6};//表示数组里面有4个int类型是值,分别是1,2,4,6
注意:要么指明数组的大小,要么指明数组的值,长度和值不能同时出现。
数组越界问题:
int[] arr=new arr[3];
system.out.println(arr[3]);
当数组下标超过数组长度减1(arr.length()-1)时,编译不会出错,但是当运行时,要为数组分配空间,这
时数组并不存在该角标的值,会报告ArrayIn
4000
dexOutOfBoundsException异常
空指针异常:
int[] arr=null;
system.out.println(arr[1]);
这时报告空指针NullPointException异常.
原因在于:引用没有指向任何值,但却还在操作实体。
三、数组遍历
数组的长度:int length= arr.length();数组的角标都是从0开始,因此数组最后一个值的角标是length-1。
class Demo { public void printArray(){ // int[] arr=new int[]{1,2,4}; int[] arr=null; //对数组进行遍历,采用for循环 for(int x=0;x<arr.length;x++) { //获取数组中每一个元素 System.out.println("arr["+x+"]="+arr[x]); } } }
四、数组常见操作
a.
打印:system.out.println(arr);
打印结果:[I@de6ced
分析结果:这代表是数组类型的引用,你面存放int型数据。de6ced表示哈希值,即数组存放的内存地址。
b.获取数组中元素的最值
思路:1.获取最值,需要进行比较,由于最值不知道,因此定义一个临时变量max赋值上0角标或者是数组第一 个元素。
2.遍历数组,取得数组中每一个值,然后和max进行比较,若大于max ,那么将max赋上新值,否则 max不变。
3.数组元素都比较完了最后的max 就是该数组最大值。
五、数组排序
a.选择排序
图例:
特点:先取得数组中第一个元素和后面所有元素进行比较,如大于后面的数,就互换位置。
再取第二个元素和数组后面所有元素比较
每一轮比较完后,都会产生一个最小值在数组头角标上。
这是一个嵌套循环。
代码实现:
public void selectSort() {//选择排序 int arr[]={2,1,5,3,7}; for(int x=0;x<arr.length-1;x++)//遍历数组 {//arr.length-1数组最后一个元素不用再比较,否则数组越界,因为没有arr[length]这个元素 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; } } } }
b.冒泡排序
图例:
特点:相邻两个元素进行比较,如果符合条件,就进行换位。
小值往前,大值往后。
一圈完成后,最大值在最后,所有第二圈最后一值可以不参加比较。
代码实现:
public void buffleSort() {//冒泡排序 int[] arr={1,3,2,8,5,0}; for(int x=0;x<arr.length-1;x++)//控制外循环,比较的圈数。 { //每次进行比较时,都是第一个元素和第二个元素比较。 for(int y=0;y<arr.length-x-1;y++) {//arr.length-x内循环在逐渐减小,所以后面的元素不用笔记 if(arr[y]>arr[y+1]) { int temp=arr[y]; arr[y]=arr[y+1]; arr[y+1]=temp; } } } }补充:a.排序最快的是希尔排序。
b.当数组元素较多时,要考虑排序的效率和性能。
c.在堆内存中换位置是比较消耗资源。因此做好是先把要换位置的元素角标在栈内存中记录下来,当比较完后,最后在换位置。
d.不管是选择排序还是冒泡排序,都用到了位置置换,那么可以把此功能封装函数,以便复用。
六、进制转换
a.十进制-二进制
原理:除2模2的过程。
结果是要倒叙的,才符合二进制。
代码体现:
public void toBin(int num) {//十进制转换二进制 //用StringBuffer存储结果,再将其反转,就是所求数的二进制 StringBuffer sb=new StringBuffer(); while(num>0) { sb.append(num%2);//取的模2的值 num=num/2;//不断除2,然后再模2 } sb.reverse();//最后将其反转,得到二进制 }
b.十进制-十六进制
原理:先拿数与上15,然后进行右移4的操作。(无符号右移>>>高位补上0)
图例:
代码体现:
public void toHex(int num) { //十进制转换十六进制 //用StringBuffer存储结果,再将其反转,就是所求数的十六进制 StringBuffer sb=new StringBuffer(); for(int x=0;x<8;x++){////4字节总共32位,十六进制是4位一组,因此是8 int temp=num & 15;//先进行与比较,存到临时变量中 if(temp>9) //十六进制在9之后的数用字母表示。 sb.append((char)(temp-10+'A')); //12-10=2+‘A’=67转换成字母就是C else sb.append(temp); num=num>>>4;//右移4位 } sb.reverse(); }
c.查表法
原理:将所有元素临时存储起来,并建立好联系。每次与上15之后的值作为索引取查之前建立好的表,然后获得对应的元素。
补充:字符数组初始化的值是"\u0000",就是一个空格。
代码体现:
public void toHex2(int num) { char[] ch={'0','1','2','3', '4','5','6','7', '8','9','A','B', 'c','D','E','F'};//建立起表的对应关系 //定义一个临时容器 char[] arr=new char[8];//4字节总共32位,十六进制是4位一组,因此是8组 int pos=arr.length;//定义一个指针 while(num!=0)//这个判断可以除去0值。只取有效位。 { int temp=num & 15; arr[--pos]=ch[temp];//将与上的数最为角标查表,倒着存 num=num>>>4; } }
d.封装函数(进制转换)
public void trans(int num,int base,int offset) { //base是要相与的数 offset是要移位的数 if(num==0) return ; char[] ch={'0','1','2','3', '4','5','6','7', '8','9','A','B', 'c','D','E','F'};//建立起表的对应关系 char[] arr=new char[32];//int型元素是4字节32位 int pos=arr.length; while(num!=0) { int temp=num & base; arr[--pos]=ch[temp]; num=num>>>offset; } }
七、二维数组
概述:二维数组可以看出是一维数组,只不过该数组中存放的元素是数组。
初始化:int[][] arr=new int[2][];//数组的行数一定要指定,能省略的是列数。
原理:二维数组存放的是数组的引用。每个实体都有地址值。
图例:
相关文章推荐
- 黑马程序员-----java基础③(数组及循环练习)
- 黑马程序员 java基础 函数 数组 查找与排序总结
- 黑马程序员 java基础之数组
- 黑马程序员:Java基础总结-----Arrays 数组的工具类
- 黑马程序员_ Java基础(函数,数组)
- 黑马程序员------java学习笔记之数组基础
- 黑马程序员:java基础学习——数组
- 黑马程序员 04 Java基础教学 - 04 - Java基础之数组
- 黑马程序员__JAVA基础__数组
- 黑马程序员 JAVA基础 数组、数组工具类、文档注释总结
- 黑马程序员——java编程那些事儿____java基础(三) 数组
- 【黑马程序员】-Java基础语法(数组) 第四天
- 黑马程序员JAVA基础-数组以及一些基本操作
- 黑马程序员---Java基础--04天(数组)
- 黑马程序员 Java基础(函数,数组)
- 黑马程序员__Java基础__数据类型__运算符__数组
- 黑马程序员_java基础(2) 流程控制语句&函数与数组
- 黑马程序员 Java基础<一> 数组及排序
- 黑马程序员JAVA基础-数组的操作
- 黑马程序员-(5)Java基础语法之数组