如何在自定义 OrderedLinkedList class 中显示从列表中删除了哪些元素?
How can I display which elements were removed from list in custom OrderedLinkedList class?
我正在使用嵌套的 Ordered ListNode
class 实现自定义 Ordered LinkedList
class。一切正常,但我试图通过访问已删除的元素来扩展它。
这不是必需的,但我很好奇这将如何工作,因为我只能使用我被指示创建的方法,它们是 boolean add()
、boolean remove()
和 clear()
.
我也在跟踪每次修改,每次成功添加、删除或调用 clear()
都会增加。我可以简单地创建另一个 OrderedLinkedList
,并将删除的元素添加到其中,但我觉得我添加了不必要的修改计数。
同样,这部分只是为了好玩,不是必需的。我觉得这会让我更深入地了解创建自定义 classes.
我将展示 remove 和 main 方法。无法更改删除方法签名。
public boolean remove(Comparable obj) {
for(OrderedListNode element = head.next; element != tail; element = element.next) {
if(obj.equals(element.dataItem)) { //if element being removed is at the cursor
OrderedListNode previousNode = element.before;
OrderedListNode nextNode = element.next;
nextNode.before = previousNode; //places next element that's after before to the element after current element [prev -> current -> next]
previousNode.next = nextNode; //places prev of next element to the element before current
element.dataItem = (Comparable)NOT_FOUND; //removed element is now null
modCount++; //another modification
theSize--; //reduce the size by 1
return true; //if remove is successful
}
}
return false; //otherwise, not successful removal
}
主要方法:
public static void main(String[] args) {
OrderedLinkedList list = new OrderedLinkedList();
OrderedLinkedList removedList = new OrderedLinkedList();
modCount = 0;
list.add("Dog");
list.add("Bird");
list.add("dog");
list.add("bird");
list.add("Cat");
System.out.println("Before removal of element");
System.out.println(list);
list.remove("Dog");
removedList.add("Dog"); //not what I'm wanting to do
System.out.println("Removed " + removedList);
System.out.println("After removal of element");
System.out.println(list);
System.out.println("Total modifications = " + modCount);
System.out.println();
}
输出:
Before removal of element
Bird, Cat, Dog, bird, dog
Removed Dog //not actually accessing the element originally removed. just printing a new list
After removal of element
Bird, Cat, bird, dog
Total modifications = 7 //unnecessary modification due to additional add
如果只想存储删除的元素而不增加修改次数,可以使用ArrayList并将删除的元素放入其中。这样您的修改次数就不会受到影响。
您可以通过实施额外的 pop 方法来存储删除的值。 return 类型应该是 Comparable 并且当找到要删除的对象时,将其存储在 temporary 对象和 return,而不是 returning boolean true。当找不到对象时,只需return null。
如果找到要删除的 Comparable 对象,该方法将 return 该对象以便您可以存储它。如果不是,则 null 将 return 以便您可以对 pop 方法使用 if-check 来获取如果删除是成功与否。
这是我刚刚为您编写的示例方法;
流行方法示例
public Comparable pop(Comparable obj) {
for (OrderedListNode element = head.next; element != tail; element = element.next) {
Comparable temp = null; // declaration of the temporary object
if (obj.equals(element.dataItem)) { // if element being removed is
// at the cursor
temp = obj; // store obj in temp
OrderedListNode previousNode = element.before;
OrderedListNode nextNode = element.next;
nextNode.before = previousNode; // places next element that's
// after before to the element
// after current element [prev
// -> current -> next]
previousNode.next = nextNode; // places prev of next element to
// the element before current
element.dataItem = (Comparable) NOT_FOUND; // removed element is
// now null
modCount++; // another modification
theSize--; // reduce the size by 1
return temp; // if remove is successful
}
}
return null; // otherwise, not successful removal
}
测试演示
你的测试代码应该是这样的;
public static void main(String[] args) {
OrderedLinkedList list = new OrderedLinkedList();
OrderedLinkedList removedList = new OrderedLinkedList();
modCount = 0;
list.add("Dog");
list.add("Bird");
list.add("dog");
list.add("bird");
list.add("Cat");
System.out.println("Before removal of element");
System.out.println(list);
// list.remove("Dog"); // not needed anymore
// removedList.add("Dog"); //not what I'm wanting to do
// pop returns the removed object
removedList.add(list.pop("Dog"));
System.out.println("Removed " + removedList);
System.out.println("After removal of element");
System.out.println(list);
System.out.println("Total modifications = " + modCount);
System.out.println();
}
我正在使用嵌套的 Ordered ListNode
class 实现自定义 Ordered LinkedList
class。一切正常,但我试图通过访问已删除的元素来扩展它。
这不是必需的,但我很好奇这将如何工作,因为我只能使用我被指示创建的方法,它们是 boolean add()
、boolean remove()
和 clear()
.
我也在跟踪每次修改,每次成功添加、删除或调用 clear()
都会增加。我可以简单地创建另一个 OrderedLinkedList
,并将删除的元素添加到其中,但我觉得我添加了不必要的修改计数。
同样,这部分只是为了好玩,不是必需的。我觉得这会让我更深入地了解创建自定义 classes.
我将展示 remove 和 main 方法。无法更改删除方法签名。
public boolean remove(Comparable obj) {
for(OrderedListNode element = head.next; element != tail; element = element.next) {
if(obj.equals(element.dataItem)) { //if element being removed is at the cursor
OrderedListNode previousNode = element.before;
OrderedListNode nextNode = element.next;
nextNode.before = previousNode; //places next element that's after before to the element after current element [prev -> current -> next]
previousNode.next = nextNode; //places prev of next element to the element before current
element.dataItem = (Comparable)NOT_FOUND; //removed element is now null
modCount++; //another modification
theSize--; //reduce the size by 1
return true; //if remove is successful
}
}
return false; //otherwise, not successful removal
}
主要方法:
public static void main(String[] args) {
OrderedLinkedList list = new OrderedLinkedList();
OrderedLinkedList removedList = new OrderedLinkedList();
modCount = 0;
list.add("Dog");
list.add("Bird");
list.add("dog");
list.add("bird");
list.add("Cat");
System.out.println("Before removal of element");
System.out.println(list);
list.remove("Dog");
removedList.add("Dog"); //not what I'm wanting to do
System.out.println("Removed " + removedList);
System.out.println("After removal of element");
System.out.println(list);
System.out.println("Total modifications = " + modCount);
System.out.println();
}
输出:
Before removal of element
Bird, Cat, Dog, bird, dog
Removed Dog //not actually accessing the element originally removed. just printing a new list
After removal of element
Bird, Cat, bird, dog
Total modifications = 7 //unnecessary modification due to additional add
如果只想存储删除的元素而不增加修改次数,可以使用ArrayList并将删除的元素放入其中。这样您的修改次数就不会受到影响。
您可以通过实施额外的 pop 方法来存储删除的值。 return 类型应该是 Comparable 并且当找到要删除的对象时,将其存储在 temporary 对象和 return,而不是 returning boolean true。当找不到对象时,只需return null。
如果找到要删除的 Comparable 对象,该方法将 return 该对象以便您可以存储它。如果不是,则 null 将 return 以便您可以对 pop 方法使用 if-check 来获取如果删除是成功与否。
这是我刚刚为您编写的示例方法;
流行方法示例
public Comparable pop(Comparable obj) {
for (OrderedListNode element = head.next; element != tail; element = element.next) {
Comparable temp = null; // declaration of the temporary object
if (obj.equals(element.dataItem)) { // if element being removed is
// at the cursor
temp = obj; // store obj in temp
OrderedListNode previousNode = element.before;
OrderedListNode nextNode = element.next;
nextNode.before = previousNode; // places next element that's
// after before to the element
// after current element [prev
// -> current -> next]
previousNode.next = nextNode; // places prev of next element to
// the element before current
element.dataItem = (Comparable) NOT_FOUND; // removed element is
// now null
modCount++; // another modification
theSize--; // reduce the size by 1
return temp; // if remove is successful
}
}
return null; // otherwise, not successful removal
}
测试演示
你的测试代码应该是这样的;
public static void main(String[] args) {
OrderedLinkedList list = new OrderedLinkedList();
OrderedLinkedList removedList = new OrderedLinkedList();
modCount = 0;
list.add("Dog");
list.add("Bird");
list.add("dog");
list.add("bird");
list.add("Cat");
System.out.println("Before removal of element");
System.out.println(list);
// list.remove("Dog"); // not needed anymore
// removedList.add("Dog"); //not what I'm wanting to do
// pop returns the removed object
removedList.add(list.pop("Dog"));
System.out.println("Removed " + removedList);
System.out.println("After removal of element");
System.out.println(list);
System.out.println("Total modifications = " + modCount);
System.out.println();
}