java之数组OOP

package com.hqy.array;

/*
 * java数据结构之数组
 *   局限:在ArrayApp类中的main函数即数据集结构的使用者必须知道数据的下标
 *        ,但有些用户只需要随机访问数组的数据项,不太需要数组的下标。
 */
class ArrayClass{
	Long[] array;

	public ArrayClass(int size) {
		array=new Long[size];
	}

	public Long getArray(int index) {
		return array[index];
	}

	public void setArray(int index,Long lg) {
		array[index]=lg;
	}

	
	
}
public class ArrayApp {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ArrayClass ac=new ArrayClass(100);
		int elementcount=0;
		ac.setArray(0,(long) 20);
		ac.setArray(1,(long) 40);
		ac.setArray(2,(long) 60);
		ac.setArray(3,(long) 34);
		ac.setArray(4,(long) 44);
		ac.setArray(5,(long) 21);
		ac.setArray(6,(long) 35);
		ac.setArray(7,(long) 32);
		ac.setArray(8,(long) 56);
		ac.setArray(9,(long) 58);
		elementcount=10;
		
		for(int i=0;i<elementcount;i++){
			System.out.print(ac.getArray(i)+" ");
		}
		System.out.println();
		
		//查找
		int searchkey=44;
		int j;
		for (j= 0; j <elementcount; j++) {
			if(ac.getArray(j)==searchkey){
				break;
			}
		}
		if(elementcount==j){
			System.out.println("can not find:"+searchkey);
			
		}else{
			System.out.println("found:"+searchkey);
		}
		
		
		//删除
		int deletekey=60;
		for(j=0;j<elementcount;j++){
			if(ac.getArray(j)==deletekey){
				break;
			}
		}
		if(j==elementcount){
			System.out.println("deletekey is not in ac");
		}else{
			for (int k=j; k<elementcount; k++) {
				ac.setArray(k, ac.getArray(k)+1);
			}
			elementcount-=1;
		}
		
		for (int i = 0; i <elementcount; i++) {
			System.out.print(ac.getArray(i)+" ");
		}
		System.out.println();
	}

}


     由于在一个普通的程序中,数据结构的使用者不会意识到访问数组下标是游泳或有关系的。

为了可以获得更多OOP的好处,应当重新分配类之间的责任。

如下:对ArrayClass的数据结构类的一个改进的接口。类用户(ArrayApp)是用这个接口就不需要再考虑下标了。

          类用户可以集中注意力于做什么而不是怎么做:什么要被插入、删除和访问,而不是如何执行这些操作。

package com.hqy.array;

/*
 * java数据结构之数组模拟
 *   局限:在ArrayApp类中的main函数即数据集结构的使用者必须知道数据的下标
 *        ,但有些用户只需要随机访问数组的数据项,不太需要数组的下标。
 */
class ArrayClass{
	private Long[] array;
    private int elemcount;
    
	public ArrayClass(int size) {
		array=new Long[size];
		elemcount=0;
	}

	public boolean find(long searchkey){
		int i;
		for(i=0;i<elemcount;i++){
			if(array[i]==searchkey){
				break;
			}
		}
		if(i==elemcount){
			return false;
		}else{
			return true;
		}
	}
	
	
	public boolean delete(Long deletekey){
		int j;
		for(j=0;j<elemcount;j++){
			if(array[j]==deletekey){
				break;
			}
		}
		
		if(j==elemcount){
			return false;
		}else{
			for (int k = j; k < elemcount; k++) {
				array[k]=array[k+1];
			}
			elemcount-=1;
			return true;
		}
	}
	
	
	public void insert(long insertkey) {
		array[elemcount++]=insertkey;
		
	}

	public void display() {
		for(int i=0;i<elemcount;i++){
			System.out.print(array[i]+" ");
		}
		System.out.println();
	}
	
}
public class ArrayApp {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ArrayClass ac=new ArrayClass(100);
		ac.display();
		
		ac.insert(20);
		ac.insert(29);
		ac.insert(32);
		ac.insert(87);
		ac.insert(99);
		ac.insert(56);
		ac.insert(33);
		
		ac.display();
		
		System.out.println(ac.find(29));
		System.out.println(ac.find(10));
		
		System.out.println(ac.delete((long) 87));
		System.out.println(ac.delete((long) 21));
		
		ac.display();
		
		
	}

}

知识引用自:<java数据结构和算法>第二版 【美】Robert Lafore 著

                                                                 计晓云  赵研 曾希 狄小菡    译



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值