您的位置:首页 > 职场人生

黑马程序员---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)两种数组排序方法:选择排序和冒泡排序

先看一下思路:





/**
要求:分别使用选择排序和冒泡排序对一个数组进行排序并打印
*/

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[ ];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: