当前位置:文档之家› Java数组

Java数组


例:TestPassArray.java图示
Stack Space required for the swap method n2: 2 n1: 1 Space required for the main method int[] a reference Heap Stack Space required for the swap2 method int[] a rray reference Space required for the main method int[] a reference
动态初始化
注:由于数组中每一个元素都作为一个单独的对象来考虑, 因而必须逐一建立 。
创建数组元素并初始化
• 对象数组(引用变量数组):对以某一类的对象 为元素的数组而言,创建并初始化每个数组元素 是必不可少的。
Student[] stu; //定义一个Student类型数组 stu=new Student[10];
图4-6对象数组初始化后的内存示意图
5. 处理数组
• 处理数组元素时,会经常使用for循环。 – 所有数组元素都是同一类型的,可以使用循 环以同样的方式反复处理; – 由于数组的大小已知,使用for循环比较合理。
(1) 用随机数初始化数组
• 以下循环用0到99之间的随机整数初始化数组 myList
0x362AB
s[0] s[1] s[2] s[3]
s
Java数组的 下限为0
数组的内存模式
• 声明数组和创建数组可以一起完成:
– int MyIntArray[]=new int[10];
• 例:
– int arr[]=new int[5];
创建数组的内存分配示意图
int a[]=new int[4];
}
图示见下页
Stack Space required for method m int[] numbers: reference int number: 1 Space required for the main method int[] y: reference int x: 1
Heap
Array of ten int values is stored here
6. 增强的for 循环
• 在J2SE 5.0中,Java语言增加了一种循环结构, 称为增强的for循环,不用下标变量就可以顺序 地访问整个数组。 for(int ele:myList){ System.out.print(ele+" "); } • 代码可以读作“对myList中的每个元素进行以下 操作”
(3) 对所有元素求和
int sum=0; for(int i=0;i<myList.length;i++){ sum+=myList[i]; } System.out.println("和为:"+sum);
(4) 查找最大元素
int max=myList[0]; for(int i=0;i<myList.length;i++){ if(myList[i]>max) max=myList[i]; } System.out.println("最大值为:"+max);
Contents of list1
list2
Contents of list2
list2 Garbage
Contents of list2
复制数组有三种方法:
1. 用循环语句逐个复制数组的元素
int[] sourceArray={2,3,4,5,33}; int[] targetArray=new int[sourceArray.length]; for(int i=0;i<sourceArray.length;i++){ targetArray[i]=sourceArray[i]; }
声明的同时赋初值:
静态初始化
String names = “Georgianna”, “Jen”, “Simon”; String names ; names = new String 3; names 0 = “Georgianna”; names 1 = “Jen”; names 2 = “Simon”;
• 注意:
– 上述语句分配存储空间,创建Student类型数组,每个 元素都是默认值为null的引用变量。 – 内存分配如下图所示:
图4-5创建对象数组的内存示意图 Student[] stu;
null
--
stu=new Student[10];
0 1 2 …… 8 9
stu
• 完成所有数组元素的创建和初始化之后,才可在程序中使 用这些元素。如果强行使用未经上述步骤初始化的数组,会 出现NullPointException异常错误。
数组标志
• 可以声明任何类型的数组──原始类型或类类型
• 声明数组仅仅指定了数组的名字和数组元素类型, 在使用数组前还必须为它分配内存空间,即创建数 组。
2. 创建数组
• 在为数组分配内存空间时必须指明数组的长度。 • 格式: – 数组名 = new 数组元素类型 [数组元素个数]; • 例:s = new char4; – 数组s获得了4个用来存放char型数据的内存空间 – 数组变量s中存放着这些内存单元的首地址
给方法传递数组参数
• Java使用值传递的方式将实参传递给方法: •对于基本数据类型的参数,传递的是实参的值 •对于数组类型的参数,参数值是引用,传递的是这个引用 public static void printArray(int[] array) { for (int i = 0; i < array.length; i++) { System.out.print(array[i] + " "); } } 调用方法: int[] list = {3, 1, 2, 6, 4, 2}; printArray(list);
• 如何创建数组元素? – 执行对象的构造方法,即实例化对象。 for (int i=0;i<10;i++){ stu[i]=new Student(); } • 内存分配如图4-6所示:
0 1 2 …… 8 9
stu
Student 对象 Student 对象 Student 对象 Student 对象 Student 对象
int myList[]=new int[5]; for(int i=0;i<myList.length;i++){ myList[i]=(int)(Math.random()*100); }
(2) 输出数组
• 为输出数组,必须使用类似下面的循环, 输出数组中的每一个元素。
ቤተ መጻሕፍቲ ባይዱ
for(int i=0;i<myList.length;i++){ System.out.print(myList[i]+" "); }
第四章 数组
数组
• 数组是相同类型的数据按顺序组成的一种复合
数据类型 • 通过数组名加数组下标来使用数组中的数据。 下标从0开始。
1. 声明数组
• 数组的声明格式:
– 数组元素类型 数组名[]; – 数组元素类型[] 数组名; – 例:int MyIntArray[]; int[] MyIntArray; – char s[];//或char[] s; – Point p ; // where Point is a class
分配4个整数的内存空间
int a[ ] = new int [4]; 把内存地址 赋给变量a
a [0] a [1] a [2] 0 0 0 0
0x1000
0x1004 0x1008
a
0x1000 a [3]
0x1012
3. 数组元素的使用
• 一维数组通过下标访问自己的元素,如s[0]; • 下标从0开始,下标越界将发生异常; • 所有的数组都有一个属性length,存储数组元素 的个数,利用它可方便地完成很多操作; – float a[]=new float[6]; – 则a.length的值为6
System.out.println("x is " + x); System.out.println("y[0] is " + y[0]);
}
public static void m(int number, int[] numbers) { number = 1001; // Assign a new value to number numbers[0] = 5555; // Assign a new value to numbers[0] }
a[1]: 2 a[0]: 1
Invoke swap(int n1, int n2). The primitive type values in a[0] and a[1] are passed to the swap method.
• 给数组元素分配内存并为数组元素赋初值的过程称 为数组初始化。初始化可分为动态初始化和静态初 始化。 • 静态初始化 – 当数组元素的初始化值直接由括在大括号“{ }” 之间的数据给出时,就称为静态初始化。 – 适用于数组的元素不多且初始元素有限时。往往 和声明结合在一起使用。 – 其格式如下: array_type array_Name={element1[, element2…]}; • 动态初始化 – 先用new操作符为数组分配内存,然后才为每一 个元素赋初值。
7. 数组的复制
• 在Java中,可以使用赋值语句复制基本类型的变量, 但不能复制数组。 • 将一个数组变量复制给另一个数组变量,实际上是 一个数组的引用复制给另一个变量,使两个变量指 向同样的内在地址。
相关主题