设计一个泛型类orderedCollection

设计一个泛型类orderedCollection,它存储的Comparable对象的集合(在数组中),以及该集合的当前大小。提供public方法isEmpty,makeEmpty,insert,remove,findMin和 findMax。

finfMin和findMax分别返回该集合中最小的和最大T对象的引用(如果该集合为空,则返回null)

/**
 * <p>
 * 设计一个泛型类orderedCollection,它存储的Comparable对象的集合(在数组中),
 * 以及该集合的当前大小。提供public方法isEmpty,makeEmpty,insert,remove,findMin和
 * findMax。finfMin和findMax分别返回该集合中最小的和最大T对象的引用(如果该集合为空,则返回null)
 * </p>
 *
 * @author wangchao
 *
 * @version 1.0.0
 *
 * @since 1.0.0
 *
 */
public class OrderedCollection {
	private Comparable[] obj;
	private int length;

	public int getLength() {
		return obj.length;
	}

	public void setLength(int length) {
		this.length = length;
	}

	public Comparable[] getObj() {
		return obj;
	}

	public void setObj(Comparable[] obj) {
		this.obj = obj;
	}

	public void makeEmpty() {
		obj = new Comparable[] {};
	}

	public Comparable findMin() {
		if (obj.length == 0) {
			return null;
		}
		int min = 0;
		for (int i = 1; i < obj.length; i++) {
			if (obj[i].compareTo(obj[min]) <= 0) {
				min = i;
			}
		}
		return obj[min];
	}

	public Comparable findMax() {
		if (obj.length == 0) {
			return null;
		}
		int max = 0;
		for (int i = 1; i < obj.length; i++) {
			if (obj[i].compareTo(obj[max]) > 0) {
				max = i;
			}
		}
		return obj[max];
	}

	public boolean isEmpty() {
		return obj.length > 0 ? false : true;
	};

	public void insert(Comparable o) {
		// 扩展数组容量
		Comparable[] temp = new Comparable[obj.length + 1];
		// 拷贝原有数组
		for (int i = 0; i < obj.length; i++) {
			temp[i] = obj[i];
		}
		// 末位添加新元素
		temp[obj.length] = o;
		obj = temp;
	}

	public boolean isPresent(Comparable o) {
		if (obj.length == 0) {
			return false;
		}
		// 遍历判断
		for (Comparable ob : obj) {
			if (o.equals(ob))
				return true;
		}
		return false;
	}

	/**
	 * <p>
	 * 此处写的很复杂,应该有更简单的方法实现
	 * </p>
	 */
	public void remove(Comparable o) {
		if (obj.length == 0) {
			return;
		}
		int count = 0;
		for (int i = 0; i < obj.length; i++) {
			if (o.equals(obj[i])) {
				obj[i] = null;
				count++;
			}
		}

		Comparable[] temp = new Comparable[obj.length - count];
		int i = 0;
		for (Comparable ob : obj) {
			if (ob != null) {
				temp[i] = ob;
				i++;
			}
		}
		obj = temp;
	}

	public static void main(String[] args) {
		OrderedCollection oc = new OrderedCollection();
		Comparable[] obj = new Comparable[] { 12, 4, 6, 2, 68 };
		oc.setObj(obj);
		System.err.println(oc.findMin());
		System.err.println(oc.getLength());
	}

}

  

  

posted @ 2016-11-18 11:10  影卓后台开发人员  阅读(805)  评论(1编辑  收藏  举报