黑马程序员技术交流社区

标题: 数组 [打印本页]

作者: 快乐之恋    时间: 2012-11-19 17:23
标题: 数组


黑马程序员_数组

日志

2012-10-12 12:19:57| 分类: 默认分类 | 标签:学习 c# 黑马程序员 数组 |字号大中小 订阅

数组

数组是同一种类型数据的集合,可以理解为数组就是一个容器。数组是引用数据类型。

好处

可以自动为数组中的元素从0开始添加编号,方便操作这些操作。

格式1

元素类型[ ] 数组名称=new 元素类型[数组长度]

如: int [ ] arr=new int[5]; 定义一个长度为5的int类型的数组。数组内值默认为0.

格式2

元素类型[]数组名称=new 元素类型[]{元素,元素.......};

如:int[] arr=new int[]{1,2,3,4,5};定义了一个长度为5int类型的数组,并且已为数组赋值。

二维数组

格式1

元素类型[ ][ ] 数组名称=new int[一维数组元素个数][二维数组元素个数]

如: int[ ] [ ] arr=new int[3][4];//创建一个名为arr的二维数组,有3个一维数组,在这三个一维数组中,每个数组包含4个元素。并且初始值全部为0.

格式2

元素类型[ ][ ] 数组名称=new int{{元素,元素},{元素,元素,元素}}//里层花括号的个数代表一维数组的个数,花括号中的元素代表着相应数组里面的元素个数和值。

如:int[ ] [ ] arr=new int{{1,2,4},{4,5,9}};

以前从不注重java的工作原理,但学习了毕老师的视频以后,觉得还是懂点为好。在学习的过程中,我了解到了java的内存结构,首先学到的是栈内存(栈区)与堆内存(堆区)。

栈内存

用于存储局部变量,当数据使用完,所占空间会自动释放。

堆内存

用于存储数组和对象,通过new建立的实例都存放在堆内存中

1.每一个实体都有对应的内存地址值(16进制)

2.实体中的变量都有默认初始化值。

3.实体在不被使用的时候,会在不确定的时间,被垃圾回收机制回收。

其他内存结构

还有方法区,本地方法区,寄存器等。

关于每个实体在堆内存中都有对应的地址值,还有一个小例子需要说明。

class A{

public int num;

}

主函数{

A a1=new A();

a1.num=5;

A a2=a1;

a2.num=4;

System.out.println(a1.num);

}

输出结果是4,以前不明白为什么a2更改了num的值,a1为什么会跟着改变。后来知道了。因为A a2=a1赋的并不是对象,而是对象在堆内存中的地址,操纵的都是同一个对象,所以值也会跟着改变。

数组的常见作用,如求最值,排序等。(因常用,可以将这些方法定义成一个工具类 ArrayTools)

class ArrayTools{

/**

需求:此函数为数组的工具类,里面包含一些如求最值,排序等方法。

在此只做int类型数组的举例,其他类型数组可以使用函数的重载

*/

//输出int类型数组中的值。

public static void printArray(int[] arr){

System.out.print("[");
for(int i=0;i<arr.length;i++){
if(i==arr.length-1)
System.out.println(arr[i]+"]");
else
System.out.print(arr[i]+",");
}

}

//得到int类型数组中的最大值

public static int getMax(int[] arr){
int max=arr[0]; //在此设置初始max为arr[0],而不直接max=0,是为了防止数组中全部负数。
for(int i=0;i<arr.length;i++){
max=max>arr[i]?max:arr[i];//在此使用三元表达式,如果arr[i]大于max,就将arr[i]的值赋予max
}
return max;
}

//得到int类型数组最小值与得到最大值雷同,不再举例。


//排序,排序方法有两种.在实际开发中,使用Array.sort()语句

//冒泡排序

public static int[] bubbleSort(int [] arr){

for(int i=arr.length-1;i>0;i--){
//冒泡排序,相邻值对比
for(int k=0;k<i;k++){
int temp=0;
if(arr[i]>arr[k]){
temp=arr[i];
arr[i]=arr[k];
arr[k]=temp;
}
}
}

return arr;

}

//选择排序

public static int[] selectSort(int[] arr){

for(int i=0;i<arr.length-1;i++){
//内循环取出外循环的角标,挨个对比。 选择排序法!
for(int k=i;k<arr.length-1;k++){
int temp=0;
if(arr[i]>arr[k]){
temp=arr[i];
arr[i]=arr[k];
arr[k]=temp;
}
}
}

return arr;

}

}

作者: 许庭洲    时间: 2013-7-15 06:28
值得学习ing!
作者: plydq    时间: 2013-8-22 22:58
这样也可以啊,还是发帖经验高啊,




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2