黑马程序员_Java基础_数组
2012-07-29 21:10
477 查看
-------
android培训、java培训、期待与您交流! ----------
一、数组
同一种类型数据的集合,也就是一个容器。
声明:
1.元素类型[]数组名 = new元素类型[元素个数]
例:int[] arr = new int[5];
2.元素类型数组名[] = new元素类型[元素个数]
例:int arr[] = new int[5];
3.元素类型[]数组名 = new元素类型[]{元素1,元素2,元素3,......};
例:int[] arr =new int[]{1,2,3,4};
int[] arr={1,2,3,4}
注:
JAVA中推荐用:类型[]数组名;
一个数组是一个对象
声明一个数组没有创建一个对象
声明时不用指定长度
创建基本数据类型数组:int[] i = new int[2];
创建引用数据类型数组:Student[] s = new Student[100];
数组创建后其中的元素有初始值
类型 黙认值
byte 0
short 0
int 0
long 0l
float 0.0f
double 0.0d
char \u0000
boolean false
reference types null
注:
创建时一定要指定长度
int[] i2=new int[]; //error
Java程序在运行时,需要在内存中分配空间。为了提高运算效率,有对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
栈内存:用于存储局部变量,当数据使用完,所占空间会自动释放。
堆内存:
1. 数组和对象,通过new建立的实例都是存放在堆内存中。
2. 每一个实体都有默认初始化值。
3. 实体中的变量都有默认初始化值。
4. 实体不在被使用,会在不确定的时间内被垃圾回收器回收。
栈内存:自动释放。堆内存:垃圾回收机制。
Java的垃圾回收:
由一个后台线程gc进行垃圾回收
虚拟机判定内存不够的时候会中断代码的运行,这时候gc才进行垃圾回收
缺点:不能够精确的去回收内存
java.lang.System.gc(); 建议回收内存,但系统不一定回应,他会先去看内存是否够用,够用则不予理睬,不够用才会去进行垃圾回收
内存中什么算是垃圾:不在被引用的对象(局部变量,没有指针指向的)
二、数组的遍历
示例:
遍历数组
![](http://my.csdn.net/uploads/201207/29/1343567316_9760.jpg)
三、获取数组中最大值和最小值
![](http://my.csdn.net/uploads/201207/29/1343567323_5309.jpg)
四、数组元素排序(选择排序)
![](http://my.csdn.net/uploads/201207/29/1343567328_6476.jpg)
五、数组元素排序(冒泡排序)
![](http://my.csdn.net/uploads/201207/29/1343567328_6476.jpg)
六、数组元素排序(位置置换功能抽取)
发现无论什么排序。都需要对满足条件的元素进行位置置换,所以可以把这部分代码提取出来,单独封装成一个函数。
![](http://my.csdn.net/uploads/201207/29/1343567328_6476.jpg)
技巧:引入import java.util.*;通过Arrays.sort();也可以进行数组排序。
七、折半查找
![](http://my.csdn.net/uploads/201207/29/1343567334_7019.jpg)
![](http://my.csdn.net/uploads/201207/29/1343567334_7019.jpg)
八、十进制->二进制和十进制->十六进制
![](http://my.csdn.net/uploads/201207/29/1343567338_2042.jpg)
九、查表法进行十进制->十六进制和十进制->二进制
![](http://my.csdn.net/uploads/201207/29/1343567342_6747.jpg)
十、进制转换优化
![](http://my.csdn.net/uploads/201207/29/1343567346_4789.jpg)
十一、 二维数组
(其实是一个一维数组,它的每一个元素又是一个一维数组)
int[][] i1 = new int[2][3];
int[][] i4 = {{1,1,1},{2,2,2},{3,3,3}};
int[][] i3 = new int[][3]; //不允许高维没分配空间而先给低维分配空间
int[][] i2 = new int[2][];
i2[0] = new int[2];
i2[1] = new int[3];
注意:
int[] x,int x[];//一维
int[][]y;int y[][]; int[] y[];//二维
int[] x,y[];//x一维,y二维
也就是:
int[] x;
int[] y[];
1.x[0]=y;//error
2.y[0]=x;//yes
3.y[0][0]=x;//error
4.x[0][0]=y;//error
5.y[0][0]=x[0];//yes
6.x=y;//error
练习:
![](http://my.csdn.net/uploads/201207/29/1343567351_6160.jpg)
-------
android培训、java培训、期待与您交流! ---------- 详细请查看:http://edu.csdn.net/heima/
android培训、java培训、期待与您交流! ----------
一、数组
同一种类型数据的集合,也就是一个容器。
声明:
1.元素类型[]数组名 = new元素类型[元素个数]
例:int[] arr = new int[5];
2.元素类型数组名[] = new元素类型[元素个数]
例:int arr[] = new int[5];
3.元素类型[]数组名 = new元素类型[]{元素1,元素2,元素3,......};
例:int[] arr =new int[]{1,2,3,4};
int[] arr={1,2,3,4}
注:
JAVA中推荐用:类型[]数组名;
一个数组是一个对象
声明一个数组没有创建一个对象
声明时不用指定长度
创建基本数据类型数组:int[] i = new int[2];
创建引用数据类型数组:Student[] s = new Student[100];
数组创建后其中的元素有初始值
类型 黙认值
byte 0
short 0
int 0
long 0l
float 0.0f
double 0.0d
char \u0000
boolean false
reference types null
注:
创建时一定要指定长度
int[] i2=new int[]; //error
Java程序在运行时,需要在内存中分配空间。为了提高运算效率,有对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
栈内存:用于存储局部变量,当数据使用完,所占空间会自动释放。
堆内存:
1. 数组和对象,通过new建立的实例都是存放在堆内存中。
2. 每一个实体都有默认初始化值。
3. 实体中的变量都有默认初始化值。
4. 实体不在被使用,会在不确定的时间内被垃圾回收器回收。
栈内存:自动释放。堆内存:垃圾回收机制。
Java的垃圾回收:
由一个后台线程gc进行垃圾回收
虚拟机判定内存不够的时候会中断代码的运行,这时候gc才进行垃圾回收
缺点:不能够精确的去回收内存
java.lang.System.gc(); 建议回收内存,但系统不一定回应,他会先去看内存是否够用,够用则不予理睬,不够用才会去进行垃圾回收
内存中什么算是垃圾:不在被引用的对象(局部变量,没有指针指向的)
二、数组的遍历
示例:
遍历数组
/* 遍历数组 */ class Test { public static void main(String[] args) { int[] arr={1,2,3,4,5,6,7}; printArray(arr);//调用自定义函数 } public static void printArray(int[] arr)//自定义遍历一维数组函数 { for(int x=0;x<arr.length;x++) { if(x!=arr.length-1) System.out.print(arr[x]+","); else System.out.print(arr[x]); } } }
![](http://my.csdn.net/uploads/201207/29/1343567316_9760.jpg)
三、获取数组中最大值和最小值
/* 获取一维数组中的最大值和最小值 */ class ArrayTest { 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 int getMin(int[] arr)//获取最小值函数 { int min=0; for(int x=1;x<arr.length;x++) { if(arr[x]<arr[min]) min=x; //存储最值数组元素的脚标 } return arr[min]; } public static void main(String[] args) { int[] arr={1,3,2,5,5}; System.out.println("max="+getMax(arr)+"\n"+"min="+getMin(arr)); } }
![](http://my.csdn.net/uploads/201207/29/1343567323_5309.jpg)
四、数组元素排序(选择排序)
/* 需求:选择排序 思路: 每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的 数列的最后,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。 */ class ArrayTest2 { public static void selectSort(int[] arr) //选择排序 { for(int x=0;x<arr.length-1;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; } } } } public static void printArray(int[] arr)//自定义遍历一维数组函数 { for(int x=0;x<arr.length;x++) { if(x!=arr.length-1) System.out.print(arr[x]+","); else System.out.print(arr[x]); } } public static void main(String[] args) { int[] arr={1,3,4,6,2,7,5}; System.out.print("排序前:");//排序前 printArray(arr);//调用打印函数 System.out.print("\n排序后:");//排序后 selectSort(arr);//调用排序函数 printArray(arr);//排序后 } }
![](http://my.csdn.net/uploads/201207/29/1343567328_6476.jpg)
五、数组元素排序(冒泡排序)
/* 需求:冒泡排序 思路: 冒泡排序是经过n-1趟子排序完成的,第i趟子排序从第1个数至第n-i个数,若第i个 数比后一个数大(则升序,小则降序)则交换两数 */ class ArrayTest2 { public static void bubbleSort(int[] arr)//冒泡排序 { for(int x=0;x<arr.length-1;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; } } } } public static void printArray(int[] arr)//自定义遍历一维数组函数 { for(int x=0;x<arr.length;x++) { if(x!=arr.length-1) System.out.print(arr[x]+","); else System.out.print(arr[x]); } } public static void main(String[] args) { int[] arr={1,3,4,6,2,7,5}; System.out.print("排序前:");//排序前 printArray(arr);//调用打印函数 System.out.print("\n排序后:");//排序后 bubbleSort(arr);//调用冒泡排序函数 printArray(arr);//排序后 } }
![](http://my.csdn.net/uploads/201207/29/1343567328_6476.jpg)
六、数组元素排序(位置置换功能抽取)
发现无论什么排序。都需要对满足条件的元素进行位置置换,所以可以把这部分代码提取出来,单独封装成一个函数。
/* 需求:冒泡排序 思路: 冒泡排序是经过n-1趟子排序完成的,第i趟子排序从第1个数至第n-i个数,若第i个 数比后一个数大(则升序,小则降序)则交换两数 */ class ArrayTest2 { public static void bubbleSort(int[] arr)//冒泡排序 { for(int x=0;x<arr.length-1;x++)//控制冒泡次数 { for(int y=0;y<arr.length-1-x;y++)//控制比较次数 { if(arr[y]>arr[y+1]) { swap(arr,y,y+1); } } } } public static void swap(int[] arr,int a,int b)//交换 { int temp=arr[a]; arr[a]=arr[b]; arr[b]=temp; } public static void printArray(int[] arr)//自定义遍历一维数组函数 { for(int x=0;x<arr.length;x++) { if(x!=arr.length-1) System.out.print(arr[x]+","); else System.out.print(arr[x]); } } public static void main(String[] args) { int[] arr={1,3,4,6,2,7,5}; System.out.print("排序前:");//排序前 printArray(arr);//调用打印函数 System.out.print("\n排序后:");//排序后 bubbleSort(arr);//调用冒泡排序函数 printArray(arr);//排序后 } }
![](http://my.csdn.net/uploads/201207/29/1343567328_6476.jpg)
技巧:引入import java.util.*;通过Arrays.sort();也可以进行数组排序。
七、折半查找
/* 数组元素的查找操作 */ class ArrayTest3 { public static void main(String[] args) { int[] arr={2,3,4,6,8,64,78}; //int index=getIndex(arr,2);//遍历查找 //int index=halfSearch(arr,8);//折半查找方法1 int index=halfSearch_2(arr,8);//折半查找方法2 System.out.println("index="+index); } //折半查找,前提是数组元素是有序的。 public static int halfSearch(int[] arr,int key)//方法1 { int min,max,mid; min=0; max=arr.length-1; mid=(max+min)/2; while(arr[mid]!=key) { if(key>arr[mid]) { min=mid+1; } else if(key<arr[mid]) { max=mid-1; } if(min>max) return -1; mid=(max+min)/2; } return mid; } public static int halfSearch_2(int[] arr,int key)//方法2 { int min=0,max=arr.length-1,mid; while(min<=max) { mid=(max+min)/2; if(key>arr[mid]) { min=mid+1; } else if(key<arr[mid]) { max=mid-1; } else return mid; } return -1; } //定义功能,获取key第一次出现在数组中的位置。如果返回是-1,那么代表该key在数组中不存在。 public static int getIndex(int[] arr,int key) { for(int x=0;x<arr.length;x++) { if(arr[x]==key) return x; } return -1; } }
![](http://my.csdn.net/uploads/201207/29/1343567334_7019.jpg)
//练习:有一个有序的数组,想要将一个元素插入到该数组中,还要保证该数组是有序的。 public static int getIndex_2(int[] arr,int key) { int min=0,max=arr.length-1,mid; while(min<=max) { mid=(max+min)/2; if(key>arr[mid]) { min=mid+1; } else if(key<arr[mid]) { max=mid-1; } else return mid; } return min;//返回要插入的具体位置 }
![](http://my.csdn.net/uploads/201207/29/1343567334_7019.jpg)
八、十进制->二进制和十进制->十六进制
/* 十进制->二进制和十进制->十六进制 */ class ArrayTest4 { public static void main(String[] args) { toBin(60);//十进制->二进制 toHex(60);//十进制->十六进制 } public static void toBin(int num)//十进制->二进制函数 { StringBuffer sb=new StringBuffer(); while(num>0) { sb.append(num%2); num=num/2; } System.out.println(sb.reverse()); } public static void toHex(int num)//十进制->十六进制函数 { StringBuffer sb=new StringBuffer(); for(int x=0;x<8;x++) { int temp=num&15; if(temp>9) { sb.append((char)(temp-10+'A')); } else { sb.append(temp); } num=num>>>4; } System.out.println(sb.reverse()); } }
![](http://my.csdn.net/uploads/201207/29/1343567338_2042.jpg)
九、查表法进行十进制->十六进制和十进制->二进制
/* 查表法进行十进制->十六进制和十进制->二进制 */ class ArrayTest5 { public static void main(String[] args) { toHex(60); toBin(60); } /* 0 1 2 3 4 5 6 7 8 9 A B C D E F (十六进制中的元素) 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 查表法:将所有的元素临时存储起来,建立对应关系。 每一次&15后的值作为索引去查建立好的表,就可以找到对应的元素。 可以通过数组的形式去定义。 */ public static void toHex(int num)//查表法16进制 { char[] chs={'0','1','2','3','4', '5','6','7','8','9', 'A','B','C','D','E','F' };//定义二进制表 char[] arr=new char[8];//定义一个临时存储容器,元素默认值'\u0000'。 int pos=arr.length; while(num!=0) { int temp=num&15; arr[--pos]=chs[temp]; num=num>>>4; } for(int x=pos;x<arr.length;x++) { System.out.print(arr[x]); } System.out.println();//换行 } public static void toBin(int num)//查表法2进制 { char[] chs={'0','1'};//定义二进制表 char[] arr=new char[32];//定义一个临时存储容器 int pos=arr.length; while(num!=0) { int temp=num&1; arr[--pos]=chs[temp]; num=num>>>1; } for(int x=pos;x<arr.length;x++) { System.out.print(arr[x]); } System.out.println();//换行 } }
![](http://my.csdn.net/uploads/201207/29/1343567342_6747.jpg)
十、进制转换优化
/* 进制转换优化 */ class ArrayTest6 { public static void main(String[] args) { toBin(-3); toOctal(30); toHex(-20); } public static void toBin(int num)//十进制->二进制 { trans(num,1,1); } public static void toOctal(int num)//十进制->八进制 { trans(num,7,3); } public static void toHex(int num)//十进制->十六进制 { trans(num,15,4); } public static void trans(int num,int base,int offset) { 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[32];//默认值'\u0000' int pos=arr.length; while(num!=0) { int temp=num&base; arr[--pos]=chs[temp]; num=num>>>offset; } for(int x=pos;x<arr.length;x++) { System.out.print(arr[x]); } System.out.println();//换行 } }
![](http://my.csdn.net/uploads/201207/29/1343567346_4789.jpg)
十一、 二维数组
(其实是一个一维数组,它的每一个元素又是一个一维数组)
int[][] i1 = new int[2][3];
int[][] i4 = {{1,1,1},{2,2,2},{3,3,3}};
int[][] i3 = new int[][3]; //不允许高维没分配空间而先给低维分配空间
int[][] i2 = new int[2][];
i2[0] = new int[2];
i2[1] = new int[3];
注意:
int[] x,int x[];//一维
int[][]y;int y[][]; int[] y[];//二维
int[] x,y[];//x一维,y二维
也就是:
int[] x;
int[] y[];
1.x[0]=y;//error
2.y[0]=x;//yes
3.y[0][0]=x;//error
4.x[0][0]=y;//error
5.y[0][0]=x[0];//yes
6.x=y;//error
练习:
/* 二维数组遍历 */ class ArrayTest7 { public static void main(String[] args) { int a[][]=new int[][]{{1},{1,2},{1,2,3},{1,2,3,4}};//定义二维数组 for(int i=0;i<a.length;i++) { for(int j=0;j<a[i].length;j++) { System.out.print(a[i][j]); } System.out.println();//换行 } } }
![](http://my.csdn.net/uploads/201207/29/1343567351_6160.jpg)
-------
android培训、java培训、期待与您交流! ---------- 详细请查看:http://edu.csdn.net/heima/
相关文章推荐
- 黑马程序员--Java基础之语法和数组总结
- 黑马程序员---JAVA基础---数组(四)
- 黑马程序员_Java基础_05数组数组拷贝、数据常见问题
- 黑马程序员 java基础之数组
- 黑马程序员-Java基础(数组,String,StringBuffer,正则表达式)
- 黑马程序员——JAVA基础之数组
- 黑马程序员JAVA基础-数组以及一些基本操作
- 黑马程序员——Java基础——数组
- 黑马程序员_java编程基础第3天函数 数组
- 『黑马程序员』java基础(环境设置,基础语法,函数数组)
- 黑马程序员 Java基础(函数,数组)
- 黑马程序员 Java基础<五> 数组
- 黑马程序员---Java基础总结---语句、函数、数组
- 黑马程序员--Java基础学习笔记【重载、数组操作】
- 黑马程序员------Java基础学习------方法和数组
- 黑马程序员——Java基础-数组、帮助文档
- 黑马程序员:java基础学习——数组
- 黑马程序员JAVA基础-数组的操作
- 黑马程序员——JAVA基础----语法(三)-- 方法和数组
- 黑马程序员_java基础_数组&参数传递