设计一个泛型类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());
}
}