数组的概念及使用
package test0904;
/*
1、什么叫数组?
指的是一组相同数据类型、相同名称、不同的索引号的存储单元的有序集合。
例如: a[0] a[1] a[2] a[3] 规定这些变量均用来存放int型数据,
且这些变量的名称统称a,它们的索引号不同。我们把这样的一组变量称之为数组a。
2、数组的特性:
a) 所有元素的类型必须一样;
b) 数组一旦创建,其元素个数就确定了,不可减少,也不可增加。
c) 数组属于引用类型。因此,一个数组就是一个对象。数组拥有一个属性为length表示其元素个数(长度)。
d) 数组的元素拥有一个索引号,它从0开始至 length-1;
e) 数组一旦创建,其元素拥有相应的默认值。
3、一数组的声明与创建。
声明: 类型名[] 数组名; 或 类型名 数组名[];
例如: int[] a; 或者 int a[];
创建: 数组名 = new 类型名[n]; 其中n表示元素个数。
例如: a = new int[3];
4、数组元素的访问: 数组名[元素的索引号];
例如: a[0] a[1] a[length-1]
若要访问所有元素,则往往需要for循环配合实现。
5、专家提供了一个专门针对一维数组操作的类: Arrays
a) 它来源于 java.util.Arrays;
b) 它专门针对一维数组操作。
c) 它提供了 sort( a ); 对一维数组进行排序。
d) 它提供了 toString(a); 对一维数组的所有元素组合并转换成一个String的字符串。
e) 它提供了 equals(a , b); 对两个一维数组判断相等(后述,结合arraycopy()方法讲)。
6、通过直接赋值的方式来创建数组。
int[] a = {1, 9, 3, 5, 6 };
7、从java5.0开始新增了一个增强型的for循环
格式: for(类型名 变量 : 数组名){
System.out.println( 变量 );
}
作用: 通常用来遍历一维数组的所有元素。
8、课堂练习:创建一个ArrayList类(即:创建一个可变的数组类).
*/
public class ArrayTest1 {
public static void main(String[] args) {
//int[] a = new int[5];
System.out.println("默认值分别如下:");
// for( int i = 0; i < a.length; i++ ){
// System.out.printf("%3d" , a[i] );
// }
String[] a = new String[10];
a[ a.length -1 ] = "北京";
for( String tt : a ){
System.out.print( tt + " " );
}
//String str = a[a.length]; //访问时超出数组的界线。
//System.out.println( "\n数组a的最后一个元素,其值是: " + str );
int[] b = { 8, 9, 1, 23, 56, 78, 98, 99 };
System.out.println("\n数组b的所有元素值分别如下:");
int sum = 0;
for( int tem : b ){
System.out.printf( "%3d " , tem );
sum += tem;
}
System.out.println(" >>> 这些元素累加值为: " + sum );
}
}
数组元素的引用
package test0904;
public class ArrayTest2 {
/*
数组的元素值可以是基本类型,也可以是引用类型。
注意: 类中的所有非静态的成员(实例变量和方法)均属于对象。因此,当对象存在时,则它们存在。反之,它们不存在.
注意: 类中的 toString()方法的特殊性,类名.toString()调用时可以省略.toString 系统会默认调用此方法;
toString 格式固定,返回一个字符串类型数据;
public String toString(){
return "";
}
*/
public static void main(String[] args) {
int[] a = {1, 8, 9, 12, 31, 99 };
System.out.println("元素值为基本类型的数组a,其元素分别如下:");
for( int tem : a ){ //增强for循环;
System.out.printf("%3d" , tem );
}
Point[] ps = new Point[3];
System.out.println("\n\nps数组元素的默认值分别为: ");
for( int i = 0; i < ps.length; i++){
//System.out.println( ps[i].toString() ); //由于对象不存在,则不可调用对象的方法。
System.out.println( ps[i] );
}
ps[0] = new Point(); //数组元素为引用类型变量,创建引用对象Piont();
ps[1] = new Point(5, 6);
ps[2] = new Point(-3, -6);
System.out.println("\n\nps中所有坐标点分别如下:");
for( Point tem : ps ){
//System.out.println( tem.toString() );
System.out.println( tem ); //toString()具有特殊性,它会被默认调用。
}
}
}
class Point {
private int x;
private int y;
public Point() {
}
public Point( int x, int y ){
this.x = x;
this.y = y;
}
public void setX(int x) {
this.x = x;
}
public void setY(int y) {
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public String toString(){
return "(" + x + " , " + y + ")";
}
}
Array 类
package test0904;
import java.util.Arrays;
/*
1、专家给定的专门针对一维数组操作的工具类: Arrays
a) 它来源于 java.util.Arrays, 使用前先导入:import java.util.Arrays;
b) 它专门针对一维数组操作。
c) 它提供了 sort( a ); 对一维数组进行排序。
d) 它提供了 toString(a); 对一维数组的所有元素组合并转换成一个String的字符串。
e) 它提供了 binarySearch(a, key); 采用二分查找法在数组a中查找key元素。
f) 它提供了 equals(a , b); 对两个一维数组判断相等(后述,结合arraycopy()方法讲)。
*/
public class ArraysTest {
public static void main(String[] args) {
int[] a = {1 , 8 , 11, 89, 11, -32, 55, 11, 11, 11, 66, 78, 2 };
System.out.println("数组a的所有元素最初顺序如下:");
System.out.println( Arrays.toString( a ) ); //将一维数组所有元素合并为一个字符串;
//排序方法,
/* for( int i = 0; i < a.length; i++ ){
for( int j = i+1; j < a.length; j++ ){
if( a[i] < a[j] ){
int tem = a[i];
a[i] = a[j];
a[j] = tem;
}
}
}
*/
Arrays.sort( a ); //调用专家给定的方法实现排序
System.out.println("\n\n以上所有整数由小到大排序如下:" );
System.out.println( Arrays.toString( a ) );
//从数组a中随机抽取一个元素并赋给key变量
int n = (int)( a.length * Math.random());
int key = 11; //a[n];
//从数组a中查找key元素,若存在,则反馈它的位置编号;若不存在,则反馈一个负数。
//它采用了二分查找法来查找数据, 二分查找法,从中间开始查找;
System.out.println("\n在 "+ Arrays.toString(a) + " 数组中查找 " + key + " 元素,结果如下:");
int loc = Arrays.binarySearch(a, key);
if( loc >= 0 ){
System.out.println("\n找到了, 它在第" + loc + "个位置上.");
}else{
System.out.println("\n找不到,结果是: " + loc );
}
int[] b = {5, 9, 6};
int[] c = {5, 9, 6, 0 };
//比较数组b与数组c是否完全相等(元素个数一样多,且每个位置上的元素值一样)
boolean flag = Arrays.equals(b , c );
if( flag ){
System.out.println( "数组b" + Arrays.toString(b) + " 等于 数组c" + Arrays.toString(c ));
}else{
System.out.println( "数组b" + Arrays.toString(b) + " 不等于 数组c" + Arrays.toString(c ));
}
}
}