2021-02-02

面向对象高级训练任务,MyList

试题:设置一个类, 命名为 MyList类中包含属性:Object[] element
方法有如下几个:

  1. 增加方法 add : 可以向数组属性中依次存储 Object,数组内容
    存满时,需实现动态扩容(详解在下面)。
  2. 删除方法 remove :可以根据数据或下标,从数组属性中删除
    Object 数据,删除后,数组后续元素需前移。
  3. 查询方法 get :方法传入下标,返回数组中指定下标的数据。
    当前存储数据量 size : 获取当前存储的有效数据长度
    动态扩容详解:无需真正增加原数组的容量,只用将原内容复制到新
    的大数组,然后让原数组名称重新等于大数组即可。由于原数组数据在堆中,
    失去引用会被 GC 自动回收。
/**
 * 数组扩容效率较低,因为涉及到拷贝问题,所以在以后开发中注意:
 * 尽可能少的进行数组的拷贝。
 * 可以在创建数组对象的时候预估计数组多长合适,最好预估准确,
 * 这样可以减少数组的扩容次数,提高效率。
 * System.arraycopy(src, srcPos, dest, destPos, length);//数组源  数组下标
 * @author Sang
 *
 */
public class MyList {
	private Object[]element;//定义Object 数组 element
	
	private int size;//数组属性的内容数量		
	public MyList(Object[] element, int size) {//构造方法
		super();
		this.element = element;
		this.size = size;	
	}
	
	public void add(Object o) {//增加方法
		if(size<element.length) {
			element[size] = o;
		}else {//扩容数组,	
			Object[]newElement = new Object[2*element.length];
			System.arraycopy(element, 0, newElement, 0, element.length);
			for (int i = 0; i < element.length; i++) {//将数组element的元素  赋值给 new Element数组
				newElement[i] = element[i];
			}
			element = newElement;//将新的数组再给到原数组
			element[size] = o;
		}
		size++;//数量+1
	}

	public void remove(Object o) {//删除方法1
		int flag = 0;
		int j = 0;
		for (j = 0; j< element.length;j++) {// // 获得数组下标 0 1 2 3 4 5
			if(element[j].equals(o)) {//判断是否存在o
				flag = 1;
				
				break;
			}
		}
		for (int  k = j;  k < element.length; k++) {//获得数组下标 1 2 3 4 5 
			element[k] = element[k+1];
			System.out.println(k);
		}
		if (flag == 1) {//判断是否数组中元素是否为o
			size--;
		}else {
			System.out.println("未找到该数据");
		}
	}
	
	public void remove(int i) {//删除方法2
		
		if (i <= size - 1) {
			for (int k = i ; k < element.length-1; k++) {
				element[k] = element[k+1];
				
			}size--;
			
		}else {
			System.out.println("未找到该数据");
		}
	}
	
	public Object get(int i) {//查询方法
		for (int index = 0; index< element.length; index++) {
			if(index == i) {
				return element[i];
			}
		}System.out.println("未找到该数据");
		return null;
	}
	public int getLength() {//返回数组长度
		int a = element.length;
		 System.out.println(a);//打印数组长度
		return element.length;
		
	
	}
	public void printAll() {//打印数组
		for (int i = 0; i < size; i++) {//
			if(element[i]!=null)//去掉空值
			System.out.println(element[i]);
		}
	}
	
	
}

调用方法,测试结果

public class MyListTest {

	public static void main(String[] args) {
		Object [] array = {10,20,30};
		MyList test = new MyList(array,3);

		
		test.add(50);
		test.add(600);
		test.printAll();
		test.remove(4);
		System.out.println("=================");
		test.printAll();
	}
}

输出结果如下:

10
20
30
50
600
=================
10
20
30
50
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值