diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 2322723..fd7e590 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 7dbe9d6..027b98b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon May 18 22:22:28 BST 2015 +#Wed Nov 27 22:57:21 CET 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.6-all.zip diff --git a/src/main/java/com/monotonic/map_visualiser/Console.java b/src/main/java/com/monotonic/map_visualiser/Console.java index def7fe5..1901c18 100644 --- a/src/main/java/com/monotonic/map_visualiser/Console.java +++ b/src/main/java/com/monotonic/map_visualiser/Console.java @@ -5,8 +5,7 @@ import java.io.PrintStream; import java.util.stream.IntStream; -public class Console -{ +public class Console { private static final String ANSI_COLOUR_RESET = "\u001B[0m"; private static final String CLEAR = "\033[H\033[2J"; private static final String ANSI_RED = "\u001B[31m"; @@ -16,71 +15,56 @@ public class Console private final PrintStream out; private final InputStream in; - public Console() - { + public Console() { this(System.out, System.in); } - public Console(final PrintStream out, final InputStream in) - { + public Console(final PrintStream out, final InputStream in) { this.out = out; this.in = in; } - public void await() - { - try - { + public void await() { + try { in.read(); - } - catch (IOException e) - { + } catch (IOException e) { e.printStackTrace(); } } - public void clear() - { + public void clear() { print(CLEAR); } - public void println(final Object value) - { + public void println(final Object value) { out.println(value); } - public void print(final Object value) - { + public void print(final Object value) { out.print(value); } - public void printf(final String format, final Object... args) - { + public void printf(final String format, final Object... args) { out.printf(format, args); } - public void red() - { + public void red() { print(ANSI_RED); } - public void yellow() - { + public void yellow() { print(ANSI_YELLOW); } - public void green() - { + public void green() { print(ANSI_GREEN); } - public void resetColour() - { + public void resetColour() { print(ANSI_COLOUR_RESET); } - public void indent(final int index) - { + public void indent(final int index) { IntStream.range(0, index).forEach(i -> print('\t')); } } diff --git a/src/main/java/com/monotonic/map_visualiser/HashMapVisualiser.java b/src/main/java/com/monotonic/map_visualiser/HashMapVisualiser.java index 3745479..e74a4fd 100644 --- a/src/main/java/com/monotonic/map_visualiser/HashMapVisualiser.java +++ b/src/main/java/com/monotonic/map_visualiser/HashMapVisualiser.java @@ -5,16 +5,14 @@ import java.util.IntSummaryStatistics; import java.util.stream.Stream; -public class HashMapVisualiser -{ +public class HashMapVisualiser { private static final Field thresholdField; private static final Field tableField; private static final Field nextField; private static final Field leftField; private static final Field rightField; - static - { + static { Type node = new Type("java.util.HashMap$Node"); Type treeNode = new Type("java.util.HashMap$TreeNode"); Type hashMap = new Type(HashMap.class); @@ -28,54 +26,48 @@ public class HashMapVisualiser private final Console console; - public HashMapVisualiser(final Console console) - { + public HashMapVisualiser(final Console console) { this.console = console; } - public void visualise(final HashMap map) - { + public void visualise(final HashMap map) { Object[] table = (Object[]) Type.get(tableField, map); console.printf( - "Size: %d, Resize: %s, Bin Count: %d%n", - map.size(), Type.get(thresholdField, map), table.length); + "Size: %d, Resize: %s, Bin Count: %d%n", + map.size(), Type.get(thresholdField, map), table.length); final IntSummaryStatistics collisions = Stream.of(table) - .mapToInt(row -> - { - if (row == null) + .mapToInt(row -> { - console.println("[]"); - return 0; - } + if (row == null) { + console.println("[]"); + return 0; + } - switch (row.getClass().getSimpleName()) - { - case "TreeNode": - return visualiseTree(row); + switch (row.getClass().getSimpleName()) { + case "TreeNode": + return visualiseTree(row); - case "Node": - return visualiseList(row); + case "Node": + return visualiseList(row); - default: - throw new IllegalArgumentException("Unknown type of row"); - } - }) - .summaryStatistics(); + default: + throw new IllegalArgumentException("Unknown type of row"); + } + }) + .summaryStatistics(); console.printf( - "Collisions: Max: %d, Ave: %s, Total: %d%n", - collisions.getMax(), - collisions.getAverage(), - collisions.getSum()); + "Collisions: Max: %d, Ave: %s, Total: %d%n", + collisions.getMax(), + collisions.getAverage(), + collisions.getSum()); } - private int visualiseList(Object node) - { + private int visualiseList(Object node) { final Object next = Type.get(nextField, node); - if (next == null) - { + if (next == null) { console.green(); printNode(node); console.resetColour(); @@ -84,8 +76,7 @@ private int visualiseList(Object node) console.red(); int index = 0; - while (node != null) - { + while (node != null) { console.indent(index); printNode(node); @@ -97,34 +88,29 @@ private int visualiseList(Object node) return index; } - private int visualiseTree(final Object node) - { + private int visualiseTree(final Object node) { console.yellow(); final int collisions = visualiseSubTree(node, 0); console.resetColour(); return collisions; } - private int visualiseSubTree(final Object node, int index) - { + private int visualiseSubTree(final Object node, int index) { console.indent(index); printNode(node); return 1 - + visualiseBranch(node, index, leftField) - + visualiseBranch(node, index, rightField); + + visualiseBranch(node, index, leftField) + + visualiseBranch(node, index, rightField); } - private void printNode(final Object node) - { + private void printNode(final Object node) { console.printf("[%s]\n", node); } - private int visualiseBranch(final Object node, final int index, final Field field) - { + private int visualiseBranch(final Object node, final int index, final Field field) { Object branch = Type.get(field, node); - if (branch != null) - { + if (branch != null) { return visualiseSubTree(branch, index + 1); } return 0; diff --git a/src/main/java/com/monotonic/map_visualiser/Sample.java b/src/main/java/com/monotonic/map_visualiser/Sample.java index 8c6f567..0609c4f 100644 --- a/src/main/java/com/monotonic/map_visualiser/Sample.java +++ b/src/main/java/com/monotonic/map_visualiser/Sample.java @@ -5,46 +5,46 @@ import java.util.HashMap; /** - * A simple program that shows at the terminal, + * A simple program that shows at the terminal, * the structure of sample HashMap and TreeMap instances. - * + * * @author Manoel Campos da Silva Filho -*/ + */ public class Sample { private final Console console; - - public Sample(){ - this.console = new Console(); + + public Sample() { + this.console = new Console(); printTreeMap(); printHashMap(); } - - private void printTreeMap(){ + + private void printTreeMap() { TreeMap treeMap1 = new TreeMap<>(); insertSampleMapData(treeMap1); System.out.println(treeMap1.getClass().getSimpleName()); - new TreeMapVisualiser(console).visualise(treeMap1); - System.out.println(); + new TreeMapVisualiser(console).visualise(treeMap1); + System.out.println(); } - - private void printHashMap(){ + + private void printHashMap() { HashMap hashMap1 = new HashMap<>(); insertSampleMapData(hashMap1); System.out.println(hashMap1.getClass().getSimpleName()); new HashMapVisualiser(console).visualise(hashMap1); - System.out.println(); + System.out.println(); } - - private void insertSampleMapData(Map map){ + + private void insertSampleMapData(Map map) { map.put("name", "Manoel Campos"); - map.put("country", "Brazil"); + map.put("country", "Brazil"); map.put("age", 35); map.put("height", 1.8); map.put("gender", 'M'); - map.put("site", "http://github.com/manoelcampos"); + map.put("site", "http://github.com/manoelcampos"); } - - public static void main(String args[]){ + + public static void main(String args[]) { new Sample(); } } \ No newline at end of file diff --git a/src/main/java/com/monotonic/map_visualiser/TreeMapVisualiser.java b/src/main/java/com/monotonic/map_visualiser/TreeMapVisualiser.java index fbdc710..e98b81d 100644 --- a/src/main/java/com/monotonic/map_visualiser/TreeMapVisualiser.java +++ b/src/main/java/com/monotonic/map_visualiser/TreeMapVisualiser.java @@ -3,8 +3,7 @@ import java.lang.reflect.Field; import java.util.TreeMap; -public class TreeMapVisualiser -{ +public class TreeMapVisualiser { private static final boolean BLACK = true; private static final boolean RED = false; @@ -13,8 +12,7 @@ public class TreeMapVisualiser private static final Field leftField; private static final Field rightField; - static - { + static { Type entry = new Type("java.util.TreeMap$Entry"); Type treeMap = new Type(TreeMap.class); @@ -26,13 +24,11 @@ public class TreeMapVisualiser private final Console console; - public TreeMapVisualiser(final Console console) - { + public TreeMapVisualiser(final Console console) { this.console = console; } - public void visualise(final TreeMap map) - { + public void visualise(final TreeMap map) { console.printf("Size: %d, %n", map.size()); Object root = Type.get(rootField, map); @@ -40,12 +36,10 @@ public void visualise(final TreeMap map) visualiseSubTree(root, 0); } - private int visualiseSubTree(final Object node, int index) - { + private int visualiseSubTree(final Object node, int index) { console.indent(index); final boolean colour = (boolean) Type.get(colorField, node); - if (colour == RED) - { + if (colour == RED) { console.red(); } @@ -53,15 +47,13 @@ private int visualiseSubTree(final Object node, int index) console.resetColour(); return 1 - + visualiseBranch(node, index, leftField) - + visualiseBranch(node, index, rightField); + + visualiseBranch(node, index, leftField) + + visualiseBranch(node, index, rightField); } - private int visualiseBranch(final Object node, final int index, final Field field) - { + private int visualiseBranch(final Object node, final int index, final Field field) { Object branch = Type.get(field, node); - if (branch != null) - { + if (branch != null) { return visualiseSubTree(branch, index + 1); } return 0; diff --git a/src/main/java/com/monotonic/map_visualiser/Type.java b/src/main/java/com/monotonic/map_visualiser/Type.java index 0b71c2f..57b0a95 100644 --- a/src/main/java/com/monotonic/map_visualiser/Type.java +++ b/src/main/java/com/monotonic/map_visualiser/Type.java @@ -2,49 +2,35 @@ import java.lang.reflect.Field; -class Type -{ +class Type { private final Class cls; - Type(final String name) - { - try - { + Type(final String name) { + try { cls = Class.forName(name); - } - catch (ClassNotFoundException e) - { + } catch (ClassNotFoundException e) { throw new IllegalStateException(e); } } - Type(final Class cls) - { + Type(final Class cls) { this.cls = cls; } - Field getField(final String fieldName) - { - try - { + Field getField(final String fieldName) { + try { final Field field = cls.getDeclaredField(fieldName); field.setAccessible(true); return field; - } - catch (NoSuchFieldException e) - { + } catch (NoSuchFieldException e) { throw new IllegalStateException(e); } } - static Object get(final Field field, final Object object) - { - try - { + static Object get(final Field field, final Object object) { + try { return field.get(object); - } - catch (IllegalAccessException e) - { + } catch (IllegalAccessException e) { throw new IllegalStateException(e); } } diff --git a/src/test/java/com/monotonic/map_visualiser/BadHash.java b/src/test/java/com/monotonic/map_visualiser/BadHash.java index 71b70f0..3116e8b 100644 --- a/src/test/java/com/monotonic/map_visualiser/BadHash.java +++ b/src/test/java/com/monotonic/map_visualiser/BadHash.java @@ -1,18 +1,15 @@ package com.monotonic.map_visualiser; -public class BadHash -{ +public class BadHash { private String value; private int hash; - public BadHash(final String value, final int hash) - { + public BadHash(final String value, final int hash) { this.value = value; this.hash = hash; } - public boolean equals(final Object o) - { + public boolean equals(final Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; @@ -21,13 +18,11 @@ public boolean equals(final Object o) return value.equals(badHash.value); } - public int hashCode() - { + public int hashCode() { return hash; } - public String toString() - { + public String toString() { return value; } } diff --git a/src/test/java/com/monotonic/map_visualiser/HashMapEg.java b/src/test/java/com/monotonic/map_visualiser/HashMapEg.java index 983f45f..65d18b3 100644 --- a/src/test/java/com/monotonic/map_visualiser/HashMapEg.java +++ b/src/test/java/com/monotonic/map_visualiser/HashMapEg.java @@ -2,11 +2,9 @@ import java.util.HashMap; -public class HashMapEg -{ +public class HashMapEg { - public static void main(String[] args) - { + public static void main(String[] args) { Console console = new Console(); console.clear(); @@ -27,8 +25,7 @@ public static void main(String[] args) console.await();*/ final HashMap treeified = new HashMap<>(); - for (int i = 0; i < 20; i++) - { + for (int i = 0; i < 20; i++) { final String value = String.valueOf(i); treeified.put(new BadHash(value, 1), value); console.clear(); diff --git a/src/test/java/com/monotonic/map_visualiser/TreeMapEg.java b/src/test/java/com/monotonic/map_visualiser/TreeMapEg.java index 500b81f..ead1022 100644 --- a/src/test/java/com/monotonic/map_visualiser/TreeMapEg.java +++ b/src/test/java/com/monotonic/map_visualiser/TreeMapEg.java @@ -2,16 +2,13 @@ import java.util.TreeMap; -public class TreeMapEg -{ - public static void main(String[] args) - { +public class TreeMapEg { + public static void main(String[] args) { final Console console = new Console(); final TreeMapVisualiser visualiser = new TreeMapVisualiser(console); final TreeMap treeified = new TreeMap<>(); - for (int i = 0; i < 26; i++) - { + for (int i = 0; i < 26; i++) { final String value = String.valueOf(i); treeified.put(value, value); console.clear();