黑马程序员--Java基础学习(数组)第四天
2015-08-17 19:59
609 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
Java基础学习(数组)第四天
一,概述
数组的定义:数组是一个容器,是同一种类型的数据集合。
好处:数组可以自动对元素编号。
定义方式:格式1:元素类型[] 数组名 = new 元素类型[元素个数或数组长度];//new在内存中产生容器实体。
格式2:元素类型[] 数组名 = new 元素类型[]{元素1,元素2,……};或 元素类型[] 数组名 = {元素1,元素2,……};
示例:int[] x = new int[3];//定义长度为三的数组,数组内的元素为整型。
数据类型的分类:1,基本数据类型如(int ,char,long,float等)。2,引用数据类型如(数组类型,字符串类型);
内存区域分布:Java在运行时在空间中划分五块区域:栈内存,堆内存,方法区,本地方法区,寄存器。
栈内存:栈内存用于存储局部变量,当数据使用完,所有空间会自动释放。
堆内存:1,数组和对象,通过new创建的实例都存放在堆内存中。2,每一个实例都有内存地址值。3,实体中的变量都有默认初始化值。4,实体不再被使用,会在不确定 的时间内被垃圾回收器回收。
数组在内存中示意图:
数组实体在堆内存中,每个元素有默认初始化值,整型数组初始化值为0。
二,常见问题
//ArrayIndexOutOfBoundsException: 操作数组时,访问到了数组中不存在的角标。
//NullPointerException:空指针异常:当引用没有任何指向值为null的情况。该引用还在用于操作实体。
三,遍历
数组的操作:获取数组中元素,通常会用到遍历。
数组中可获取长度的属性。数组名.length。
遍历数组的示例:
输出结果为:
四,排序
1,选择排序。2,冒泡排序
选择排序示例:
冒泡排序示例:
五,数组元素位置置换
元素置换示例:
[b]六,查找
数组查找操作,有序数组可以折半查找。
折半查找示例:
七,进制转换
十进制转二进制示
4000
例:
十进制转十六进制示例:
十进制转十六进制查表法示例:
十进制转二进制查表法示例。
八,二维数组
二维数组定义方式如:int[ ] [ ] arr = new int [ ] [ ];
Java基础学习(数组)第四天
一,概述
数组的定义:数组是一个容器,是同一种类型的数据集合。
好处:数组可以自动对元素编号。
定义方式:格式1:元素类型[] 数组名 = new 元素类型[元素个数或数组长度];//new在内存中产生容器实体。
格式2:元素类型[] 数组名 = new 元素类型[]{元素1,元素2,……};或 元素类型[] 数组名 = {元素1,元素2,……};
示例:int[] x = new int[3];//定义长度为三的数组,数组内的元素为整型。
数据类型的分类:1,基本数据类型如(int ,char,long,float等)。2,引用数据类型如(数组类型,字符串类型);
内存区域分布:Java在运行时在空间中划分五块区域:栈内存,堆内存,方法区,本地方法区,寄存器。
栈内存:栈内存用于存储局部变量,当数据使用完,所有空间会自动释放。
堆内存:1,数组和对象,通过new创建的实例都存放在堆内存中。2,每一个实例都有内存地址值。3,实体中的变量都有默认初始化值。4,实体不再被使用,会在不确定 的时间内被垃圾回收器回收。
数组在内存中示意图:
数组实体在堆内存中,每个元素有默认初始化值,整型数组初始化值为0。
二,常见问题
//ArrayIndexOutOfBoundsException: 操作数组时,访问到了数组中不存在的角标。
//NullPointerException:空指针异常:当引用没有任何指向值为null的情况。该引用还在用于操作实体。
三,遍历
数组的操作:获取数组中元素,通常会用到遍历。
数组中可获取长度的属性。数组名.length。
遍历数组的示例:
class ReadArray { public static void main(String[] args) { //定义一个数组 int[] arr = {4,5,6,7,8}; int x; //循环遍历数组输出数组中元素内容 for(x=0 ; x<arr.length; x++){ System.out.println("arr["+x+"]"+"="+arr[x]); } } }
输出结果为:
四,排序
1,选择排序。2,冒泡排序
选择排序示例:
//选择排序 /** 给int数组进行选择排序 @param arr 接收一个int类型的数组 */ 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]) { swap(arr,x,y); } } } }
冒泡排序示例:
//冒泡排序 /** 给int数组进行冒泡排序 @param arr 接收一个int类型的数组 */ public static void bubbleSort(int[] arr) { for(int x=0; x<arr.length-1; x++) { for(int y=0; y<arr.length-x-1; y++) { if(arr[y]>arr[y+1]) { swap(arr,y,y+1); } } } }
五,数组元素位置置换
元素置换示例:
//数据交换 /** 给数组中的元素进行位置的置换。 @para arr 接收一个int类型的数组。 @para a 要置换的位置 @para b 要置换的位置 */ private static void swap(int[] arr,int a,int b)//私有化此功能,只暴露出需要的功能 { int temp = arr[a]; arr[a] = arr; arr[b] = temp; }
[b]六,查找
数组查找操作,有序数组可以折半查找。
折半查找示例:
折半查找必须保证数组是有序的。 */ public static int halfSearch(int [] arr, int key) { 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; }
七,进制转换
十进制转二进制示
4000
例:
/* 十进制--》二进制 */ public static void toBin(int num) { StringBuffer sb = new StringBuffer();//存数据的容器。 while(num>0) { //System.out.println(num%2); sb.append(num%2);//一个功能每算一个存入内存。 num=num/2; } System.out.println(sb); System.out.println(sb.reverse());//数据翻转。 }
十进制转十六进制示例:
/* 十进制-->十六进制 */ public static void toHex(int num) { StringBuffer sb = new StringBuffer(); for(int x=0;x<9; x++) { int temp = num & 15; if(temp>9) //System.out.println((char)(temp-10+'A')); sb.append((char)(temp-10+'A')); else sb.append(temp); //System.out.println(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后的值作为索引去查建立好的表。就可以找对应的元素。 这样比 -10+‘a’简单的多。 这个表怎么建立那? 可以通过数据的形式来定义。 发现终于出结果了。但是是反着的,想要正过来呢?可以通过StringBuffer reverse功能来完成。 但是这个工具还没有学习。 所以可以使用已经学习过的容器:数组来完成存储。; */ 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 [] arr = new char[8]; int pos = arr.length;//-1;//指针变量; //for(int x=0; x<8; x++) while(num!=0) { int temp = num & 15; //System.out.println(chs[temp]); 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]+","); } */ trans(num,15,4); }
/*取查表法十六进制转换和二进制转换的共性部分定义一个十进制到 二进制,八进制,或者十六进制的转换功能函数 */ public static void trans(int num,int base,int offset) { if(num==0)//如果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++) { if(x==arr.length-1) System.out.println(arr[x]); else System.out.print(arr[x]+","); } } }
十进制转二进制查表法示例。
// 查表法十进制--》二进制转换 public static void toBin_2(int num) { /* //定义二进制的表。 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]+","); } */ trans(num,1,1);//调用共用的转换函数 }
八,二维数组
二维数组定义方式如:int[ ] [ ] arr = new int [ ] [ ];
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统