黑马程序员-Java学习02-数组

来源:互联网 发布:不一样的卡梅拉 知乎 编辑:程序博客网 时间:2024/06/07 12:24

-----------android培训java培训、java学习型技术博客、期待与您交流!------------

1.数组:
同一种类型数据的集合,其实数组就是一个容器。
格式: 元素类型[]数组名 = new 元素类型[元素个数]
           元素类型[]数组名 = new 元素类型[]{元素1,元素2……}
           元素类型[]数组名 ={}
1. int[] arr=new int[5]; 创建一个长度为5 的,变量名为arr,类型为整型的数组。
2. int[] arr=new []{5,6,8,3,4}
int[] arr={5,6,8,3,4}

2.数组要注意的问题:
ArrayIndexOutOfBoundsException:操作数组时切记不能访问不存在的角标。如int[] arr= new int[3],角标最大的为arr[2];
NullPointerException:空指针异常,引用了没有任何指向的数组角标。
数组长度:array.length
数组遍历:for 循环。
System.out.print(数组名);该方法打印的是数组的引用地址,哈希算法。

3.数组应用:
1.给定一个数组获取其中的最大值。
数组排序:
选择排序
冒泡排序:
折半查找(数组必须是排好序的)

/*数组的应用: * 1.选择排序 * 2.冒泡排序 * 3.折半查找 * 4.求最值。 * 后续可以直接使用Arrays中的sort()和binarySearch()方法 * */package nuddles.j2seDemo;public class ArrayDemo { * @param argspublic static void main(String[] args) {// TODO Auto-generated method stubint[] arr = {1,5,3,9,7,45,34,23};//selectionSort(arr);ArrayTool.bubbleSelection(arr);ArrayTool.arrPrint(arr);System.out.println(ArrayTool.binsearch(arr, 45));System.out.println(ArrayTool.max(arr));}}class ArrayTool{//新声明一个类,把关于数组的方法都写到一个类中来,定义成静态方法,这样只要调用这个类名就能实现具体方法public static void selectionSort(int[] arr){//选择排序for (int i = 0; i < arr.length-1; i++) {for(int j = i+1;j < arr.length;j++){if(arr[i] >arr[j]){swap(i,j,arr);}}}}public static void bubbleSelection(int[] arr){//冒泡排序for(int i = 0;i < arr.length-1;i++){for (int j = 0; j < arr.length-i-1; j++) {if (arr[j] > arr[j+1]) {swap(j,j+1,arr);}}}}public static int binsearch(int[] arr,int key){//对半查找int max = arr.length;int min = 0;int mid = 0;while(max> min){mid = (max+min)/2;if(arr[mid] > key){max = min-1;}else if (arr[mid] < key) {min = mid +1;}else{return mid;}}return -1;}public static int max(int[] arr ){//求最值int max = arr[0];for (int i = 1; i < arr.length; i++) {if (arr[i]>max) {max = arr[i];}}return max;}public static void swap(int i,int j, int[] arr){//交换两个值int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}public static void arrPrint(int[] arr){//利用StringBuilder 来打印数组StringBuilder sb = new StringBuilder();sb.append("[");for (int i : arr) {sb.append(i+",");}sb.deleteCharAt(sb.length()-1);sb.append("]");System.out.println(sb);}}
运行结果:
[1,3,5,7,9,23,34,45]
7
45

进制转换:查表,位移
/*进制转换 * 思路:利用&和>>来进行转换,构造成通用的函数 * 当然后续可以直接使用Integer类中的toBinaryString,toHexString,toOctalString和 * Sting类的parseInt(string,radix)(其它进制转换成10进制) *  * */package nuddles.j2seDemo;public class TypeConvert {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println(convert(60, 15, 4));System.out.println(convert(60, 7, 3));System.out.println(convert(60, 1, 1));}public static String convert(int num,int diwei,int weiyi){//构建进制转换通用函数,接收三个参数,num为要转换的数值,diwei为要取的低位,weiyi为要移的位数char[] arr = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};StringBuilder sb = new StringBuilder();//用StringBuiler来存储while (num != 0) {int index = num&diwei;sb.append(arr[index]);num = num>>weiyi;}sb.reverse();//倒序一下return new String(sb);//返回String}}
运行结果:
3C
74
111100

4、数组中的数组

        也称多维数组,这里我们主要讲二维数组。

        格式1 int[][] arr= new int[3][2];

        解释:以上格式表示定义了名称为arr的二维数组。有3个一维数组,每一个一维数组中有2个元素。一维数组的名称分别为arr[0],arr[1],arr[2]给第一个一维数组1脚标位赋值为78写法是:arr[0][1] = 78

        格式2 int[][] arr= new int[3][];

         注:此种格式中每个一维数组都是默认初始化值null

         格式3int[][] arr = {{3,8,2},{2,7},{9,0,1,6}};//每一个一维数组中具体元素都初始化了。

注:一种特殊定义写法:int[]x,y[]; x是一维数组,y是二维数组。



5.java内存结构:
栈1.存放局部变量2.不可以被多个线程共享3.空间连续,速度快堆1.存放对象2.可以被多个线程共享3.空间不连续,速度慢,但是灵活方法区1.存放类的信息:代码、静态变量、字符串常量等等2.可以被多个线程共享3.空间不连续,速度慢,但是灵活
注:new 的实体都在堆里,堆内存中的实体都有默认初始化值,堆里的东西,如果没有引用后,会自动回收。




   -----------android培训java培训、java学习型技术博客、期待与您交流!------------



0 0
原创粉丝点击