笔记11 数组

数组的概念及使用
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 ));
		}
	}
}


 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值