我正在处理一些类的实现,但我似乎无法让它的一部分工作。我Junit
用来检查我的实现是否正确,我只剩下一个错误需要纠正。
这是我似乎无法正确处理的部分,如描述中所述,我应该实现一个remove
方法,但据我所知,它实际上并没有删除x
:
/**
* Removes the specified element from this set if it is present.
* post: x is removed if it was present
* @param x the element to remove - if present
* @return true if the set contained the specified element
*/
public boolean remove(Object x) {
return false;
}
这是我当前的代码:
public boolean remove(Object x) {
if(super.remove(x)){
if( maxElement == x ){
updateMax();
}
return true;
}
return false;
}
private void updateMax() {
E newMax = set.get(0);
for ( E x : set){
if (x.compareTo(newMax) > 0) {
newMax = x;
}
}
maxElement = newMax;
}
但它不会按预期工作。
我正在从另一个类实现这个类,这就是我使用 super 的原因。另一个具有相同删除部分的类使用相同的代码片段。
这是所有的源代码:
我正在尝试实现的 MaxSet 类:
package set;
import java.util.NoSuchElementException;
public class MaxSet<E extends Comparable<E>> extends ArraySet<E> {
private E maxElement;
public MaxSet() {
super();
}
public E getMax() {
if (isEmpty()) {
throw new NoSuchElementException();
}
return maxElement;
}
public boolean add(E x) {
if (isEmpty()) {
maxElement = x;
} else if (x.compareTo(maxElement) > 0) {
maxElement = x;
}
return super.add(x);
}
public boolean remove(Object x) {
if(set.contains(x)){
set.remove(x);
return remove(x); // true if the set contained the specified element
}
return super.remove(x);
}
public boolean addAll(SimpleSet<? extends E> c) {
return super.addAll(c);
}
}
ArraySet 父类:
package set;
import java.util.ArrayList;
import java.util.Iterator;
public class ArraySet<E> implements SimpleSet<E> {
protected ArrayList<E> set;
public ArraySet() {
set = new ArrayList<E>();
}
public boolean add(E x) {
if(!set.contains(x)) {
return set.add(x);
}
return false;
}
public boolean remove(Object x) {
if(set.contains(x)){
return set.remove(x);
}
return false; //?
}
public boolean contains(Object x) {
if(set.contains(x)){
return true;
}
return false;
}
public boolean isEmpty() {
if(set.isEmpty()){
return true;
}
return false;
}
public int size() {
return set.size();
}
public Iterator<E> iterator() {
return set.iterator();
}
public boolean addAll(SimpleSet<? extends E> s) {
Iterator<? extends E> it = s.iterator();
boolean changed = false;
while (it.hasNext()) {
changed = changed || add(it.next());
}
return changed;
}
}