summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorschneefux <schneefux+commit@schneefux.xyz>2018-09-27 12:51:37 +0200
committerschneefux <schneefux+commit@schneefux.xyz>2018-09-27 12:51:37 +0200
commitbe1ce64c5aa213ee92594f3afcdef7a08c775df7 (patch)
tree111c907c1cd36f0107b5d77043a9815a1e604129
parent72cc9abf555a7ad0609f3f5fa520e967915d893a (diff)
downloadalgo-labor-be1ce64c5aa213ee92594f3afcdef7a08c775df7.tar.gz
algo-labor-be1ce64c5aa213ee92594f3afcdef7a08c775df7.zip
Remove Optionals and refactor
-rw-r--r--AlgoAufgabe1/bin/de/ostfalia/algo/ws18/s1/Main.classbin1310 -> 2294 bytes
-rw-r--r--AlgoAufgabe1/bin/de/ostfalia/algo/ws18/s1/Management.classbin7856 -> 7352 bytes
-rw-r--r--AlgoAufgabe1/bin/de/ostfalia/algo/ws18/s1/Member.classbin4921 -> 4894 bytes
-rw-r--r--AlgoAufgabe1/src/de/ostfalia/algo/ws18/s1/Main.java18
-rw-r--r--AlgoAufgabe1/src/de/ostfalia/algo/ws18/s1/Management.java51
-rw-r--r--AlgoAufgabe1/src/de/ostfalia/algo/ws18/s1/Member.java15
6 files changed, 61 insertions, 23 deletions
diff --git a/AlgoAufgabe1/bin/de/ostfalia/algo/ws18/s1/Main.class b/AlgoAufgabe1/bin/de/ostfalia/algo/ws18/s1/Main.class
index db6e52f..ef977e4 100644
--- a/AlgoAufgabe1/bin/de/ostfalia/algo/ws18/s1/Main.class
+++ b/AlgoAufgabe1/bin/de/ostfalia/algo/ws18/s1/Main.class
Binary files differ
diff --git a/AlgoAufgabe1/bin/de/ostfalia/algo/ws18/s1/Management.class b/AlgoAufgabe1/bin/de/ostfalia/algo/ws18/s1/Management.class
index d077242..4009f40 100644
--- a/AlgoAufgabe1/bin/de/ostfalia/algo/ws18/s1/Management.class
+++ b/AlgoAufgabe1/bin/de/ostfalia/algo/ws18/s1/Management.class
Binary files differ
diff --git a/AlgoAufgabe1/bin/de/ostfalia/algo/ws18/s1/Member.class b/AlgoAufgabe1/bin/de/ostfalia/algo/ws18/s1/Member.class
index 555a5ff..021ced8 100644
--- a/AlgoAufgabe1/bin/de/ostfalia/algo/ws18/s1/Member.class
+++ b/AlgoAufgabe1/bin/de/ostfalia/algo/ws18/s1/Member.class
Binary files differ
diff --git a/AlgoAufgabe1/src/de/ostfalia/algo/ws18/s1/Main.java b/AlgoAufgabe1/src/de/ostfalia/algo/ws18/s1/Main.java
index 686a0bd..91bbebc 100644
--- a/AlgoAufgabe1/src/de/ostfalia/algo/ws18/s1/Main.java
+++ b/AlgoAufgabe1/src/de/ostfalia/algo/ws18/s1/Main.java
@@ -1,9 +1,23 @@
package de.ostfalia.algo.ws18.s1;
+import java.time.LocalDate;
+
+import de.ostfalia.algo.ws18.base.Gender;
+import de.ostfalia.algo.ws18.base.KindOfSport;
+
public class Main {
public static void main(String ...args) {
- Management management = new Management("Materialien/Mitglieder10000.txt");
+ Management management = new Management();
+ management.checkpoint();
+ management.insert(new Member("Blümchen", "Benjamin", LocalDate.now(), Gender.M, KindOfSport.TANZEN));
+ System.out.println(management.checkpoint()/1000 + " ms für das erste insert");
+ management.insert(new Member("Kolumna", "Carla", LocalDate.now(), Gender.F, KindOfSport.RADSPORT));
+ System.out.println(management.checkpoint()/1000 + " ms für das zweite insert");
System.out.println("management hat " + management.size() + " Elemente, eingefügt in " + management.numberOfOperations());
- System.out.println("Suche Claudia Wexler: " + management.search("Wexler", "Claudia") + ", gefunden nach " + management.numberOfOperations());
+ management.checkpoint();
+ System.out.println("Suche Claudia Wexler: "
+ + management.search("Wexler", "Claudia")
+ + ", gefunden nach " + management.numberOfOperations()
+ + " Operationen und " + management.checkpoint()/1000 + " ms");
}
}
diff --git a/AlgoAufgabe1/src/de/ostfalia/algo/ws18/s1/Management.java b/AlgoAufgabe1/src/de/ostfalia/algo/ws18/s1/Management.java
index 2be04c7..59c5d20 100644
--- a/AlgoAufgabe1/src/de/ostfalia/algo/ws18/s1/Management.java
+++ b/AlgoAufgabe1/src/de/ostfalia/algo/ws18/s1/Management.java
@@ -4,7 +4,6 @@ import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
-import java.util.Optional;
import java.util.function.Predicate;
import de.ostfalia.algo.ws18.base.IManagement;
@@ -13,14 +12,18 @@ import de.ostfalia.algo.ws18.base.KindOfSport;
public class Management implements IManagement {
/**
- * Tracks the number of operations.
+ * Track the number of operations.
*/
private int numberOfOperations = 0;
+ /**
+ * Track the execution time.
+ */
+ private long lastCheckpointNs;
/**
* Current head node.
*/
- private Optional<LinkedListNode<IMember>> head = Optional.empty();
+ private LinkedListNode<IMember> head;
/**
* Length of the list.
*/
@@ -61,7 +64,7 @@ public class Management implements IManagement {
*
* @param filename Path to the CSV file.
*/
- private void importFromFile(String filename) {
+ public void importFromFile(String filename) {
File file = new File(filename);
try (BufferedReader bufferedReader = new BufferedReader(new FileReader(file))) {
@@ -80,14 +83,14 @@ public class Management implements IManagement {
*/
private Management filter(Predicate<IMember> criteria, boolean breakAfterFirstMatch) {
Management result = new Management();
- if (!this.head.isPresent()) {
+ if (this.size == 0) {
return result;
}
// searches from head, inserts at head -> result is reversed
result.reverse();
- LinkedListNode<IMember> currentNode = this.head.get();
+ LinkedListNode<IMember> currentNode = this.head;
do {
// traverse = 1 operation
this.numberOfOperations++;
@@ -108,10 +111,15 @@ public class Management implements IManagement {
* Find the first element that matches the given criteria.
*
* @param criteria Criteria to search for.
- * @return An optional containing the first element that matches the given criteria.
+ * @return The first element that matches the given criteria or null.
*/
- private Optional<IMember> search(Predicate<IMember> criteria) {
- return this.filter(criteria, true).head.map(head -> head.getValue());
+ private IMember search(Predicate<IMember> criteria) {
+ Management filteredList = this.filter(criteria, true);
+ if (filteredList.size() == 0) {
+ return null;
+ } else {
+ return filteredList.head.getValue();
+ }
}
/**
@@ -150,10 +158,10 @@ public class Management implements IManagement {
this.numberOfOperations++;
LinkedListNode<IMember> newHead = new LinkedListNode<IMember>(value);
- if (this.head.isPresent()) {
- newHead.setNext(this.head.get());
+ if (this.head != null) {
+ newHead.setNext(this.head);
}
- this.head = Optional.of(newHead);
+ this.head = newHead;
this.size++;
return true; // TODO?
@@ -167,7 +175,7 @@ public class Management implements IManagement {
*/
@Override
public IMember search(long key) {
- return this.search(member -> member.getKey() == key).orElse(null);
+ return this.search(member -> member.getKey() == key);
}
/**
@@ -180,7 +188,7 @@ public class Management implements IManagement {
@Override
public IMember search(String name, String firstName) {
return this.search(member -> member.getName().equals(name)
- && member.getFirstName().equals(firstName)).orElse(null);
+ && member.getFirstName().equals(firstName));
}
/**
@@ -214,11 +222,11 @@ public class Management implements IManagement {
@Override
public IMember[] toArray() {
IMember[] array = new IMember[this.size];
- if (!this.head.isPresent()) {
+ if (this.size() == 0) {
return array;
}
- LinkedListNode<IMember> currentNode = this.head.get();
+ LinkedListNode<IMember> currentNode = this.head;
for (int index = 0; index < this.size; index++) {
if (reversed) {
@@ -243,4 +251,15 @@ public class Management implements IManagement {
this.numberOfOperations = 0;
return numberOfOperations;
}
+
+ /**
+ * Reset the timer and get the time difference in ns.
+ *
+ * @return Nanoseconds since the last call.
+ */
+ public long checkpoint() {
+ long nanoseconds = this.lastCheckpointNs;
+ this.lastCheckpointNs = System.nanoTime();
+ return this.lastCheckpointNs - nanoseconds;
+ }
}
diff --git a/AlgoAufgabe1/src/de/ostfalia/algo/ws18/s1/Member.java b/AlgoAufgabe1/src/de/ostfalia/algo/ws18/s1/Member.java
index 0d0c9bd..7ade60e 100644
--- a/AlgoAufgabe1/src/de/ostfalia/algo/ws18/s1/Member.java
+++ b/AlgoAufgabe1/src/de/ostfalia/algo/ws18/s1/Member.java
@@ -104,10 +104,7 @@ public class Member implements IMember {
String nameKeyPart = encodeLetters(member.name.substring(0, 1));
String surnameKeyPart = encodeLetters(member.firstname.substring(0, 1));
String dateKeyPart = encodeDate(member.date);
- String key = String.format("%s%s%s",
- nameKeyPart,
- surnameKeyPart,
- dateKeyPart);
+ String key = nameKeyPart + surnameKeyPart + dateKeyPart;
return Long.valueOf(key);
}
@@ -118,7 +115,7 @@ public class Member implements IMember {
* @return A String ttmmjjjj.
*/
private static String encodeDate(LocalDate date) {
- return String.format("%02d%02d%02d",
+ return String.format("%02d%02d%02d", // 2 digits, left pad
date.getDayOfMonth(),
date.getMonthValue(),
date.getYear());
@@ -165,6 +162,7 @@ public class Member implements IMember {
/**
* Return this member as string.
*/
+ @Override
public String toString() {
return this.key + ", "
+ this.name + ", "
@@ -179,30 +177,37 @@ public class Member implements IMember {
*
* @return @see Comparable
*/
+ @Override
public int compareTo(IMember member) {
return Long.compare(this.key, member.getKey());
}
+ @Override
public String getName() {
return this.name;
}
+ @Override
public Gender getGender() {
return this.gender;
}
+ @Override
public LocalDate getDate() {
return this.date;
}
+ @Override
public String getFirstName() {
return this.firstname;
}
+ @Override
public long getKey() {
return this.key;
}
+ @Override
public KindOfSport getKindOfSport() {
return this.kindOfSport;
}