黑马程序员--Java基础--02数组

来源:互联网 发布:新浪邮箱smtp端口号 编辑:程序博客网 时间:2024/04/30 07:31

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

数组
数组的定义:
同一种类型数据的集合。其实数组就是一个容器,用于存储数据的容器。数组是一种常用的数据结构,它是一组有序数据的集合。数组中的每个元素具有相同的数据类型,可以用一个统一的数组名和下标来唯一的确定数组中的元素。数组中元素可以
是简单的数据类型,也可以是类类型。但要求一个数组中的所有元素的类型必须一致。数组有一维数组和多维数组。

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

数组变量声明:
一维数组:
格式1:
  元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
实例:int [] arr    = new  int[8];
格式2:
元素类型[] 数组名 = new 元素类型[]{元素,元素,,,,,};
    int []    arr = new int[]{2,5,3,7};
int []    arr = {9,3,1,0};
二维数组[][]
格式1:int[][] arr = new int [6][3];
定义了名称为arr的二维数组
二维数组中有3个一维数组
每一个一维数组中有2个元素
一维数组的名称分别为arr[0],arr[1],arr[2]
给第一个一维数组1角标位赋值为56写法是:arr[0][1]=78;
格式2:int[][] arr = new int[3][];
二维数组中有3个一维数组
每个一维数组都是默认初始化值null
可以对这个三个一维数组分别进行初始化
arr[0] = new int [3];
arr[1] = new int [4];
arr[2] = new int [3];
格式3:int[][] arr = {{3,2,6,3,1}{8.2,43,5,45}}
二维数组有两个一维数组
两个一维数组分别为:
arr[0] = {3,2,6,3,1};
arr[1] = {8.2,43,5,45};

数组Demo

//查找操作class ArrayTest {public static void main(String[] args) {int [] arr= new int[]{2,4,5,7,9};//定义了一个一维的int类型数组并初始化为{2,4,5,7,9};int index=getIndex(arr,3);int index2=getIndex_2(arr,4);int index3=getIndex_2(arr,20);int inde=halfSearch(arr,7);int inde2=halfSearch_2(arr,8);//System.out.println("index="+index);System.out.println("inde="+inde);System.out.println("inde2="+inde2);System.out.println("index="+index2+"   "+index3);}/*数组中查找操作*/public static int getIndex(int [] arr,int a){for (int x=0;x<arr.length ;x++ ){if(a==arr[x])return x;}return -1;}/*折半查找,提高效率,但是必须要保证该数组是有序的数组。*/public static int getIndex_2(int [] arr,int key){int min,max,mid;min=0;max=arr.length-1;mid=(min+max)/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=(min+max)/2;}return mid;}/*折半的第二种方式*/public static int halfSearch(int [] arr,int key){int min=0,max=arr.length-1,mid;while(min<=max){mid=(max+min)>>1;if(key>arr[mid])min=mid+1;else if(key<arr[mid])max=mid-1;elsereturn mid;}return -1;}/*练习,有一个有序的数组,想要将一个元素插入到该数组中,还要保证数组是有序的。*/public static int halfSearch_2(int [] arr,int key){int min=0,max=arr.length-1,mid;while(min<=max){mid=(max+min)>>1;if(key>arr[mid])min=mid+1;else if(key<arr[mid])max=mid-1;elsereturn mid;}return min;}}
内存结构:
Java程序在运行时,需要在内存中分配空间。为了提高运算效率,有时对空间进行了
不同区域的划分,因为每一片区域都有特定的处理方式和内存管理方式。

栈内存:
用于存储局部变量,当数据使用完,所占空间会自动释放。
堆内存:
数组和对象,通过new建立的实例都存放在堆内存中。
每一个实体都有内存地址值
实体中的变量都有默认初始化值
实体不在被使用,会在不确定的时间内被垃圾回收器回收。
方法区,本地方法区,寄存器。

各进制间转换

//各进制间转换class ArrayTest2 {public static void main(String[] args) {toBin(6);toHex(60);toHex_2(60);toBin_2(6);System.out.println();toBin_3(-6);System.out.println();toHex_3(-60);System.out.println();toOct(60);}/*十进制转换为二进制*/public static void toBin(int a){StringBuffer sb= new StringBuffer();//能够存放数据的容器while(a>0){sb.append(a%2);//一个个存储数据a=a/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'));elsesb.append(temp);num=num  >>>  4; }System.out.println(sb.reverse());}/*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_2(int num){char [] chs={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};//定义了一个char类型的一维数组并直接初始化//定义一个临时容器。char [] arr=new char[8];int pos=arr.length;while(num!=0){int temp=num&15;arr[--pos]=chs[temp];num=num>>>4;}System.out.println("pos="+pos);//存储数据的arr数组遍历。for(int x=pos;x<arr.length;x++){System.out.print(arr[x]+",");}} /*二进制查表发*/public static void toBin_2(int num){char [] chs={'0','1'};//定义了一个char类型的一维数组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]);}}/*进制转换优化*//*十进制转化为二进制*/public static void toBin_3(int num){trans(num,1,1);}/*十进制转化为二进制*/public static void toOct(int num){trans(num,7,3);}/*十进制转化为二进制*/public static void toHex_3(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];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]);}}}

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

详细请查看:http://edu.csdn.net/


0 0
原创粉丝点击