数组的应用

                                数组总结

 数组是非常重要的数据结构,其中一维数组是最简单得的数组,其定义格式如下:

   数据类型[]  数组名  = new 数据类型[数组大小]

   例如:

     Int [] age = new int[100]  定义了一个大小为100的整形数组,要注意的是,以这种方式声明的数组将使用java默认值来(例如,任何数值类型其默认值为0)初始化这个数组,我们可以不在new操作符中来指定数组的大小,而是提供一个初始值列表,例如,下面的语句将创建一个包含10,20,30的数组:

 Int[] b = new int[]{10,20,30}

一旦定义了一个数组就可以使用下标来选择你要使用的元素,例如b[2]的值为30.

 

 

 

使用数组会经常出现两种异常,其中之一是由于试图在分配数组之前就使用数组变量。例如,声明这样一个数组,int [] b;但没有用new操作符为其开辟一片内存空间,这时b可以认为是一个指向空的指针变量,当我们试图访问b[2]这样的的元素时,就会抛出NullPointerException(空指针异常)异常。

另一个常见错误就是试图访问超出边界的数组,例如,有这样一个数组,int[] scores = newi int[4] 该数组的下标为从03,当我们使用太小的下标或太大下标时就会出错,程序将抛出ArrayIndexOutOfBoundsException(数组越界异常)

 

数组的长度,每个数组都有一个名为length的实例变量,它表示数组的长度。注意length不是一个方法,所以语法只是  数组名.length; 而没有参数列表,顺便说一下,当数组变量是Null指针,你就不能查看他的长度,否则会抛出空指针异常。

 

数组的赋值,我们可以使用赋值语句来让两个数组变量指向同一个数组,例如:

Int [] scores;

Int [] exams;

Scores = new int[4];

Score[0] = 7;

Score [1] = 22;

Score [2] = 19;

Exams = scores;

在这些语句之后,scores指向了一个包含三个整数,7,22,19的数组,赋值语句exams = scores之后使得exams指向同一个数组。

下面的这些代码是我写的一些关于数组的常见应用的方法。    

package test;

public class IntArrayBag implements Cloneable{
	private int[] data;//存储元素的数组
	private int manyItems;//使用了多少数组
 //无参数构造函数
	public IntArrayBag(){
		final int INITIAL_CAPACITY = 100;
		manyItems = 0;
		data = new int[INITIAL_CAPACITY];
	}
	//含有参数的构造函数,又来实例变量
	public IntArrayBag(int initialCapacity){
		if(initialCapacity<0){
			throw new IllegalArgumentException("initialCapacity is negativa:" + initialCapacity );
			
		}
		manyItems = 0;
		data = new int[initialCapacity];
	}
	//add方法
	public void add(int element){
		if(manyItems == data.length){
			//将容量翻倍加1
			ensureCapacity(manyItems*2+1);
		}
		data[manyItems] = element;
		manyItems++;
	}
	//addAll方法
	public void addAll(IntArrayBag addend){
		//如果addend为空,会抛出空指针异常
		ensureCapacity(manyItems+addend.manyItems);
		System.arraycopy(addend, 0, data, manyItems, addend.manyItems);
		manyItems += addend.manyItems;
	}
	//复制方法,复制一个IntArrayBag对象
	public Object clone(){
		IntArrayBag answer  = new IntArrayBag();
		try {
			answer = (IntArrayBag) super.clone();
		} catch (CloneNotSupportedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		answer.data = (int [])data.clone();
		return answer;
	}
	// countOccurrences方法,统计特定元素出现的次数
	public int countOccurence(int target){
		int count = 0;
		for(int i = 0;i<manyItems;i++){
			if(target == data[i]){
				count++;
			}
			
		}
		return count;
	}
	//
	public void ensureCapacity(int minimumCapacity){
		int biggerArray[];
		if(data.length<minimumCapacity){
			biggerArray = new int[minimumCapacity];
			System.arraycopy(data, 0, biggerArray, 0, manyItems);
			data = biggerArray;
		}
	}
	//获取数组长度的方法
	public int getCapacity(){
		return data.length;
	}
	//移除数组中元素的方法
	public boolean remove(int target){
		int index;//target在data数组中的位置
		index = 0;
		while((index<manyItems)&&(target != data[index])){
			index++;
		}
		if(index == manyItems){
			return false;
		}else {
			
			manyItems--;
			data[index] = data[manyItems];
			return true;
		}
	}
	public int size(){
		return  manyItems;
	}
	public static IntArrayBag union(IntArrayBag b1,IntArrayBag b2){
		 IntArrayBag answer = new IntArrayBag(b1.getCapacity()+b2.getCapacity());
		 System.arraycopy(b1.data, 0, answer.data, 0, b1.manyItems);
		 System.arraycopy(b2.data, 0, answer.data,   b1.manyItems,b2.manyItems);
		 answer.manyItems = b1.manyItems+b2.manyItems;
		 return answer;
		 
	}
	
}
package test;

public class BagDemoTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		IntArrayBag age = new IntArrayBag();
		age.add(1);
		age.add(2);
		age.add(3);
		age.add(2);
		System.out.println(age.size());
		System.out.println(age.countOccurence(2));
		age.remove(2);
		System.out.println(age.size());
		
		
		
		IntArrayBag age2  =new IntArrayBag();
		age2.add(3);
		age2.add(4);
		age2.add(5);
		age2.add(6);
		age2.add(3);
		age2.add(6);
		
		IntArrayBag total = IntArrayBag.union(age, age2);
		System.out.println(total.size());
		
		

	}

}

 

<!--EndFragment-->

猜你喜欢

转载自csuhaore.iteye.com/blog/1976032