黑马程序员---Java 数组(三)
2015-07-08 21:43
253 查看
-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
一、概念
同一种类型数据的集合。简单的来说就是一容器,用来装东西的。
使用数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些元素。
内存结构中的五个空间: 栈内存,堆内存,方法区,本地方法区,寄存器
栈内存:用于存储局部变量,当数据使用完,所占空间会自动释放
堆内存:数组和对象,通过new建立的实例(实体)都存放在堆内存中
每一个实体都有内存地址值
实体中的变量都有默认初始化值
实体不在被使用,会在不确定的时间内被垃圾回收器回收
各个区的处理方法不同
二、一维数组的格式
数组是一种单独的数据类型! 属于 引用类型!
格式1:
int [] arr = new int [3];
int arr[] = new int[3];
格式2:
如: int [] arr = new int []{1,2,3,4,5};
简写的静态初始化格式 int [] arr = {1,2,3,4,5};
其中:new是用来在堆内存中产生一个容器实体。
三、数组操作常见问题
(1)、数组脚标越界异常(ArrayIndexOutOfBoundsException)。
int[] arr = new int[5];
System.out.println(arr[8]);
访问到了数组中的不存在的脚标时发生。
(2)、空指针异常(NullPointerException)。
int[] arr = null;
System.out.println(arr[0]);
arr引用没有指向实体,却在操作实体中的元素时。
遍历数组
int[] arr=new int[3];
for(int x=0; x<3; x++)
{
System.out.printIn(arr[x]);
}
练习题:1) 给定一个数组,获取数组中的最大值,以及最小值
练习题2)两种数组排序方法:选择排序和冒泡排序
先看一下思路:
注意: 选择排序:是从左往右,从小往大排
冒泡排序:是从右往左,小大往小排
练习题:十进制转二进制 及十进制转十六进制
练习题: 用查表法将十进制转换成十六进制和二进制!
四、数组中的数组(多维数组)
格式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。int[][] arr=
new int[3][] 中arr[0],arr[1],arr[2]的值都null
当int arr[0]=new int[3]
; 时 arr[0]保存的是 int[3]的内存地址,如上图所示
格式3:int[ ][ ] arr = {{3,8,2},{2,7},{9,0,1,6}};//每一个一维数组中具体元素都初始化了。
注:一种特殊定义写法:int[ ]x,y[ ]; x是一维数组,y是二维数组。
一维数组的定义方式: int[ ] x; int x[ ];
二维数组的定义方式: int[ ][ ] y; int y[ ][ ]; int[ ] y[ ];
一、概念
同一种类型数据的集合。简单的来说就是一容器,用来装东西的。
使用数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些元素。
内存结构中的五个空间: 栈内存,堆内存,方法区,本地方法区,寄存器
栈内存:用于存储局部变量,当数据使用完,所占空间会自动释放
堆内存:数组和对象,通过new建立的实例(实体)都存放在堆内存中
每一个实体都有内存地址值
实体中的变量都有默认初始化值
实体不在被使用,会在不确定的时间内被垃圾回收器回收
各个区的处理方法不同
二、一维数组的格式
数组是一种单独的数据类型! 属于 引用类型!
格式1:
int [] arr = new int [3];
int arr[] = new int[3];
格式2:
如: int [] arr = new int []{1,2,3,4,5};
简写的静态初始化格式 int [] arr = {1,2,3,4,5};
其中:new是用来在堆内存中产生一个容器实体。
三、数组操作常见问题
(1)、数组脚标越界异常(ArrayIndexOutOfBoundsException)。
int[] arr = new int[5];
System.out.println(arr[8]);
访问到了数组中的不存在的脚标时发生。
(2)、空指针异常(NullPointerException)。
int[] arr = null;
System.out.println(arr[0]);
arr引用没有指向实体,却在操作实体中的元素时。
遍历数组
int[] arr=new int[3];
for(int x=0; x<3; x++)
{
System.out.printIn(arr[x]);
}
练习题:1) 给定一个数组,获取数组中的最大值,以及最小值
练习题2)两种数组排序方法:选择排序和冒泡排序
先看一下思路:
/** 要求:分别使用选择排序和冒泡排序对一个数组进行排序并打印 */ class Sort { public static void main(String[] args) { int[] arr1= {9,8,7,4,56,3,2,44}; int[] arr2= {9,8,7,4,56,3,2,44}; swap1(arr1[0],arr1[1]); //selectSort(arr1); //调用排序方法 //bubbleSort(arr2); //调用冒泡排序方法 for(int x = 0;x < arr1.length;x++) { // System.out.print(arr1[x]+","); } System.out.print("\n"); for(int x = 0;x < arr2.length;x++) { System.out.print(arr2[x]+","); } } /* 选择排序 1、先用0角标上的元素依次与其他元素进行比较,将较小值元素存放到0角标。 2、然后再拿1角标上的元素依次进行比较,以此类推。 */ 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]) { //arr[x]=arr[y]; //arr[y]=temp; swap(arr,x,y); } } } } /* 冒泡排序 1、先从头角标相邻两个元素之间进行比较,将较大值存放在后一个元素中,然后再与后一个元素的进行比较,直至最大值存放到最后一个元素中。 2、再重复1操作,每次计较次数减一,一圈比完后存放的较大元素不再参与比较。 */ public static void bubbleSort(int[] arr) { System.out.print("swap1"); for (int x=0;x<arr.length-1;x++) { for (int y=0;y<arr.length-1-x;y++)//-x:让没每一次比较的元素减少。-1:避免角标越界。 { if(arr[y]>arr[y+1]) //swap(arr,y,y+1); swap1(arr[y],arr[y+1]); } } } //互换方法 public static void swap(int[] arr,int x,int y) { int temp; temp=arr[x]; arr[x]=arr[y]; arr[y]=temp; } public static void swap1(int x,int y) { // int temp; int temp=x; x=y; y=temp; System.out.print("x="+x+";"+"y="+y); } }
注意: 选择排序:是从左往右,从小往大排
冒泡排序:是从右往左,小大往小排
练习题:十进制转二进制 及十进制转十六进制
class hex { public static void main(String[] args) { //十进制转换为二进制 int num=10; StringBuffer sbBin = new StringBuffer(); StringBuffer sbHex = new StringBuffer(); while(num>0) { sbBin.append(num%2); num=num/2; } System.out.println(sbBin.reverse()); //System.out.printIn(sbBin.reverse()); //十进制转换为十六进制 num=60;dd for(int x=0;x<8;x++) { int temp=num&15; if(temp>9) sbHex.append((char)(temp-10+'a')); else sbHex.append(temp); num=num>>>4; } System.out.println(sbHex.reverse()); } }
练习题: 用查表法将十进制转换成十六进制和二进制!
四、数组中的数组(多维数组)
格式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。int[][] arr=
new int[3][] 中arr[0],arr[1],arr[2]的值都null
当int arr[0]=new int[3]
; 时 arr[0]保存的是 int[3]的内存地址,如上图所示
格式3:int[ ][ ] arr = {{3,8,2},{2,7},{9,0,1,6}};//每一个一维数组中具体元素都初始化了。
注:一种特殊定义写法:int[ ]x,y[ ]; x是一维数组,y是二维数组。
一维数组的定义方式: int[ ] x; int x[ ];
二维数组的定义方式: int[ ][ ] y; int y[ ][ ]; int[ ] y[ ];
相关文章推荐