I need help with this Java Data Structures assignment. Thanks The System.nanoTim
ID: 3860781 • Letter: I
Question
I need help with this Java Data Structures assignment. Thanks
The System.nanoTime() is used to measure the Runtime
Runtime Class Code
import java.util.Arrays;
public class RunTime {
private static final int MAX = 10;
private long[] runtimes;
private int count;
public RunTime() {
this.runtimes = new long[MAX];
this.count += 0;
}
public void addRuntime(long runTime) {
if (this.count == MAX) {
for (int i = 0; i < (MAX - 1); i++) {
this.runtimes[i] = this.runtimes[i + 1];
}
this.runtimes[MAX - 1] = runTime;
} else {
this.runtimes[count] = runTime;
this.count += 1;
}
}
public double getAverageRunTime() {
double sum = 0;
for (int i = 0; i < this.count; i++) {
sum += this.runtimes[i];
}
return (sum / this.count);
}
public long getLastRunTime() {
return this.runtimes[this.count - 1];
}
public long[] getRunTimes() {
return Arrays.copyOf(this.runtimes, this.count);
}
public void resetRunTimes() {
for (int i = 0; i < MAX; i++) {
this.runtimes[i] = 0;
}
}
}
ListInterface Methods
LinkedLinkNode
Driver Interface Methods
Details 1. RunTime Class You will copy the RunTime class that you created in Homework 1 to the project you are using for this assignment. 2. Array Based List Class You will write the ArrayBasedList. java class which will implement the List Interface. The interface may be downloaded from ListInterfaceiava. Please note that you do not inherit from the RunTime class. 3. Linked List Class You will write the LinkedList java class which will implement the List Interface The interface may be downloaded from ListInterface.iava Please note that you do not inherit from the RunTime class. 4. Linked list Node Class Your will write the LinkedListNode. Please see the Linked List Documentation for all the methods you will need. Please note that you do not inherit from the RunTime class. 5. Driver Class You will write the Driver ava class which will implement the Driver Interface. The interface may be downloaded from DriverInterface.iava.Explanation / Answer
import java.io.IOException;
import java.io.PrintStream;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.ListIterator;
import java.util.concurrent.TimeUnit;
import static java.math.BigDecimal.valueOf;
import static java.util.concurrent.TimeUnit.NANOSECONDS;
public class StopWatch {
private long startTime;
private long endTime;
private String taskName;
private List<Long> timestamps = new ArrayList<Long>();
public StopWatch(String taskName) {
this.taskName = taskName;
}
StopWatch(String taskName, long startTime, long endTime, List<Long> timestamps) {
this.taskName = taskName;
this.startTime = startTime;
this.endTime = endTime;
this.timestamps = timestamps;
}
public StopWatch start() {
this.startTime = System.nanoTime();
return this;
}
public void step() {
this.timestamps.add(System.nanoTime());
}
public StopWatch stop() {
this.endTime = System.nanoTime();
return this;
}
public long getElapsed(TimeUnit timeUnit) {
return timeUnit.convert(endTime - startTime, NANOSECONDS);
}
public BigDecimal getElapsedPrecision(TimeUnit timeUnit) {
return getPrecisionDifference(this.startTime, this.endTime, timeUnit);
}
private BigDecimal getPrecisionDifference(long startTime, long endTime, TimeUnit timeUnit) {
return valueOf(endTime - startTime).divide(valueOf(NANOSECONDS.convert(1, timeUnit)));
}
public String prettyPrintString(TimeUnit timeUnit) {
return new StringBuffer().append(String.format("Task: %s took ", taskName)) .append(getElapsedPrecision(timeUnit).toPlainString())
.append(timestamps.isEmpty() ? " " : " " + getElapsedIntervalString(timeUnit) + " ")
.append(timeUnit)
.toString();
}
private String getElapsedIntervalString(TimeUnit timeUnit) {
List<String> intervals = new ArrayList<String>();
ListIterator<Long> iterator = timestamps.listIterator();
long lastInterval = startTime;
while (iterator.hasNext()) {
Long currentInterval = iterator.next();
intervals.add(getPrecisionDifference(lastInterval, currentInterval, timeUnit).toPlainString());
lastInterval = currentInterval;
}
intervals.add(getPrecisionDifference(lastInterval, this.endTime, timeUnit).toPlainString());
return Arrays.toString(intervals.toArray());
}
public Appendable prettyPrint(Appendable writeTo, TimeUnit timeUnit) throws IOException {
return writeTo.append(prettyPrintString(timeUnit));
}
public void prettyPrint(PrintStream ps, TimeUnit timeUnit) {
ps.println(prettyPrintString(timeUnit));
}
}