A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 快乐之恋 中级黑马   /  2012-11-19 17:23  /  2058 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文



黑马程序员_数组

日志

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;

}

}

2 个回复

倒序浏览
值得学习ing!
回复 使用道具 举报
这样也可以啊,还是发帖经验高啊,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马