黑马程序员技术交流社区
标题:
数组
[打印本页]
作者:
快乐之恋
时间:
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