我有一系列名为Task
的对象,其中包含一个名为startTime
的字段。我将这些对象存储在按startTime
排序的链接列表中,并希望将其设置为使得在一个对象中增加startTime
将增加所有对象之后的startTime
它。这是我想要迭代的基本逻辑:
public void calculateStartTime(){
if(startTime + duration > nextObject.getStartTime()){
nextObject.setStartTime(startTime + duration);
nextObject.calculateStartTime;
}
}
如何让Task
知道其节点,以便calculateStartTime()
可以包含在Task
中,并引用与链接相同的prev
和next
- 列表参考?
答案 0 :(得分:0)
要完全按照您的意愿行事,您必须使用Task对象作为节点创建自己的链接列表。例如:
public class Task {
Task previous, next;
Date startTime;
...
}
在您的调用方法中,您将获得对第一个任务的引用,并且您可以根据需要迭代列表。 这样做可以让你执行你提出的逻辑,但滚动你自己的链表的缺点是你失去了内置的LinkedList的功能。
请使用以下方法检查“助手”类是否对您有益:
calculateStartTime(ListIterator<E> remainderOfList) {
while(remainderOfList.hasNext()) {
E element = remainderOfList.next();
element.calculateStartTime();
}
}
从LinkedList生成ListIterator
答案 1 :(得分:0)
如果你想这样做而不扩展并创建你自己的LinkedList类,试着在创建它们时将LinkedList的引用传递给Task对象。
示例任务类。
import java.util.LinkedList;
public class Task {
int startTime;
private LinkedList<Task> taskList;
public Task(LinkedList<Task> taskList){
this.taskList = taskList;
}
public void calculateStartTime(){
//your logic
int duration = 10;
//check if this task is the last element of the list
if(taskList.size() > 0 && taskList.getLast() != this){
int index = taskList.indexOf(this);
Task nextObject = taskList.get(index + 1);
if(startTime + duration > nextObject.getStartTime()){
nextObject.setStartTime(startTime + duration);
nextObject.calculateStartTime();
}
}
}
public int getStartTime(){
return startTime;
}
public void setStartTime(int startTime){
this.startTime = startTime;
}
}
答案 2 :(得分:0)
您真正需要制作“链接列表”的每个任务都包含一个任务(列表中的下一个)。问题是,如果你这样做,你就无法利用Java Collections中内置的所有东西,比如排序和迭代器。
另一方面,如果你将它保存在传统的链表中,你必须反复遍历列表以找到你想要的那个,所以为什么不继续迭代其余的并在每个上调用calculate。您可能甚至不需要它作为链表,将任务传递给calculateStartTime并调用它。
我喜欢你想要做的事情,但与替代方案相比,它可能比它的价值更多。