diff --git a/group24/1148285693/learning2017/.gitignore b/group24/1148285693/learning2017/.gitignore index 556caf3bbd..d0a68ed136 100644 --- a/group24/1148285693/learning2017/.gitignore +++ b/group24/1148285693/learning2017/.gitignore @@ -34,6 +34,3 @@ logs *.bak .directory .DS_Store - - -Test.java diff --git a/group24/1148285693/learning2017/common/src/main/java/me/lzb/common/utils/AppUtils.java b/group24/1148285693/learning2017/common/src/main/java/me/lzb/common/utils/AppUtils.java index 906c88e747..cb9a6bce28 100644 --- a/group24/1148285693/learning2017/common/src/main/java/me/lzb/common/utils/AppUtils.java +++ b/group24/1148285693/learning2017/common/src/main/java/me/lzb/common/utils/AppUtils.java @@ -1,12 +1,13 @@ package me.lzb.common.utils; /** - * Created by lzbfe on 2017/4/29. + * @author LZB */ public class AppUtils { /** * 获取一个数的位数 + * * @param i * @return */ diff --git a/group24/1148285693/learning2017/common/src/main/java/me/lzb/common/utils/ByteUtils.java b/group24/1148285693/learning2017/common/src/main/java/me/lzb/common/utils/ByteUtils.java index f6586ce761..b001584850 100644 --- a/group24/1148285693/learning2017/common/src/main/java/me/lzb/common/utils/ByteUtils.java +++ b/group24/1148285693/learning2017/common/src/main/java/me/lzb/common/utils/ByteUtils.java @@ -1,17 +1,17 @@ package me.lzb.common.utils; /** - * Created by LZB on 2017/4/14. + * @author LZB */ public class ByteUtils { - public static String byteToHexString(byte[] codes ){ + public static String byteToHexString(byte[] codes) { StringBuffer buffer = new StringBuffer(); - for(int i=0;i= capacity){ + if (size >= capacity) { removeLastOne(); } - } + } /** * 删除最后一个节点 */ - private void removeLastOne(){ + private void removeLastOne() { last = last.prev; //使GC ROOT 不可达 last.next.prev = null; @@ -98,17 +98,18 @@ private void removeLastOne(){ /** * 把某节点移动到最顶部 + * * @param tmp 在链表中的任意节点 */ - private void moveToFirst(Node tmp){ - if(tmp == first){ - return; + private void moveToFirst(Node tmp) { + if (tmp == first) { + return; } - if (tmp.next != null){ + if (tmp.next != null) { tmp.next.prev = tmp.prev; tmp.prev.next = tmp.next; - }else { + } else { tmp.prev.next = null; //当这个节点是last的时候,更新last last = tmp.prev; @@ -123,47 +124,49 @@ private void moveToFirst(Node tmp){ /** * 在顶部增加一个节点 + * * @param node node */ - private void addAsFirst(Node node){ + private void addAsFirst(Node node) { first.prev = node; first = node; } - /** * ASC + * * @return */ - public String toString(){ - StringBuilder buffer = new StringBuilder(); - Node node = first; - while(node != null){ - buffer.append(node.pageNum); + public String toString() { + StringBuilder buffer = new StringBuilder(); + Node node = first; + while (node != null) { + buffer.append(node.pageNum); - node = node.next; - if(node != null){ - buffer.append(","); - } - } - return buffer.toString(); - } + node = node.next; + if (node != null) { + buffer.append(","); + } + } + return buffer.toString(); + } /** * DESC + * * @return */ - public String toStringDESC(){ + public String toStringDESC() { StringBuilder buffer = new StringBuilder(); Node node = last; - while(node != null){ + while (node != null) { buffer.append(node.pageNum); node = node.prev; - if(node != null){ + if (node != null) { buffer.append(","); } } diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/expr/CalUtil.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/expr/CalUtil.java index 5b52ab0863..426e0c50ba 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/expr/CalUtil.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/expr/CalUtil.java @@ -7,7 +7,7 @@ import java.util.Stack; /** - * Created by LZB on 2017/4/20. + * @author LZB */ public class CalUtil { diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/expr/InfixExpr.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/expr/InfixExpr.java index 833ee8cfda..e2618c5b19 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/expr/InfixExpr.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/expr/InfixExpr.java @@ -5,7 +5,8 @@ /** * 中序表达式 - * Created by LZB on 2017/4/15. + * + * @author LZB */ public class InfixExpr { diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/expr/InfixToPostfix.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/expr/InfixToPostfix.java index d9b1d3e5a6..1e177ee3bc 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/expr/InfixToPostfix.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/expr/InfixToPostfix.java @@ -5,7 +5,8 @@ /** * 中序转后序 - * Created by LZB on 2017/4/20. + * + * @author LZB */ public class InfixToPostfix { diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/expr/Node.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/expr/Node.java index 1c698f1101..371688ac84 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/expr/Node.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/expr/Node.java @@ -1,7 +1,7 @@ package me.lzb.basic.expr; /** - * Created by LZB on 2017/4/20. + * @author LZB */ public class Node { float number; @@ -22,7 +22,7 @@ public boolean isLevel3() { return calLevel == 3; } - public boolean isNumber(){ + public boolean isNumber() { return calLevel == -1; } } diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/expr/PostfixExpr.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/expr/PostfixExpr.java index 22a0db2ee0..c1e844820c 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/expr/PostfixExpr.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/expr/PostfixExpr.java @@ -6,7 +6,8 @@ /** * 后缀表达式 - * Created by LZB on 2017/4/20. + * + * @author LZB */ public class PostfixExpr { diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/expr/PrefixExpr.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/expr/PrefixExpr.java index 27b7b2f52d..392d9b5b3d 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/expr/PrefixExpr.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/expr/PrefixExpr.java @@ -6,7 +6,8 @@ /** * 前缀表达式 - * Created by LZB on 2017/4/20. + * + * @author LZB */ public class PrefixExpr { diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/list/ArrayList.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/list/ArrayList.java index a999b662f1..f56eae6ec7 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/list/ArrayList.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/list/ArrayList.java @@ -2,7 +2,8 @@ /** * 简易ArrayList - * Created by LZB on 2017/3/11. + * + * @author LZB */ public class ArrayList implements List { diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/list/ArrayUtil.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/list/ArrayUtil.java index dcfa9c39f6..5d0b617698 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/list/ArrayUtil.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/list/ArrayUtil.java @@ -1,5 +1,8 @@ package me.lzb.basic.list; +/** + * @author LZB + */ public class ArrayUtil { /** @@ -68,9 +71,9 @@ public int[] merge(int[] array1, int[] array2) { int a1 = array1[0]; int a2 = array2[0]; - if(a1 < a2){ + if (a1 < a2) { mini = a1; - }else { + } else { mini = a2; } @@ -88,11 +91,10 @@ public int[] merge(int[] array1, int[] array2) { int oldMin = mini; - int aa1 = mini; - if(mini < array1[array1.length - 1] ){ + if (mini < array1[array1.length - 1]) { for (int j = 0; j < array1.length; j++) { - if(array1[j] > mini){ + if (array1[j] > mini) { aa1 = array1[j]; break; } @@ -101,9 +103,9 @@ public int[] merge(int[] array1, int[] array2) { } int aa2 = mini; - if(mini < array2[array2.length - 1] ){ + if (mini < array2[array2.length - 1]) { for (int j = 0; j < array2.length; j++) { - if(array2[j] > mini){ + if (array2[j] > mini) { aa2 = array2[j]; break; } @@ -111,20 +113,20 @@ public int[] merge(int[] array1, int[] array2) { } - if(aa1 != oldMin && aa2 != oldMin){ - if(aa1 < aa2){ + if (aa1 != oldMin && aa2 != oldMin) { + if (aa1 < aa2) { mini = aa1; - }else { + } else { mini = aa2; } - }else if(aa1 != oldMin){ + } else if (aa1 != oldMin) { mini = aa1; - }else { + } else { mini = aa2; } - if(oldMin == mini){ + if (oldMin == mini) { l3 = i; break; } @@ -137,13 +139,10 @@ public int[] merge(int[] array1, int[] array2) { System.arraycopy(tmp, 0, result, 0, l3); - return result; } - - /** * 把一个已经存满数据的数组 oldArray的容量进行扩展, 扩展后的新数据大小为oldArray.length + size * 注意,老数组的元素在新数组中需要保持 @@ -170,7 +169,7 @@ public int[] grow(int[] oldArray, int size) { * @return */ public int[] fibonacci(int max) { - if (max <= 1){ + if (max <= 1) { return new int[0]; } @@ -181,12 +180,12 @@ public int[] fibonacci(int max) { int n = 0; - while (n < max){ + while (n < max) { int[] t = new int[result.length + 1]; System.arraycopy(result, 0, t, 0, result.length); - n = t[i-1] + t[i - 2]; + n = t[i - 1] + t[i - 2]; - if(n >= max){ + if (n >= max) { return result; } @@ -208,29 +207,29 @@ public int[] fibonacci(int max) { * @return */ public int[] getPrimes(int max) { - if (max <= 2){ + if (max <= 2) { return new int[0]; } - if (max == 3){ + if (max == 3) { return new int[]{2}; } - int[] primes = new int[max+1]; + int[] primes = new int[max + 1]; primes[0] = 2; int count = 1; for (int i = 3; i < max; i = i + 2) { boolean isPrime = true; for (int j = 3; j < i; j++) { - if(i % j == 0){ + if (i % j == 0) { isPrime = false; break; } } - if(isPrime){ + if (isPrime) { primes[count] = i; count = count + 1; } @@ -243,7 +242,7 @@ public int[] getPrimes(int max) { } - private boolean isPrime(int a){ + private boolean isPrime(int a) { if (a < 2) { return false; } @@ -252,13 +251,13 @@ private boolean isPrime(int a){ return true; } - if(a % 2 == 0){ + if (a % 2 == 0) { return false; } for (int i = 3; i < a; i = i + 2) { - if(a % i == 0){ + if (a % i == 0) { return false; } } @@ -267,7 +266,6 @@ private boolean isPrime(int a){ } - /** * 所谓“完数”, 是指这个数恰好等于它的真因子之和,例如6=1+2+3 * 给定一个最大值max, 返回一个数组, 数组中是小于max 的所有完数 @@ -276,7 +274,7 @@ private boolean isPrime(int a){ * @return */ public int[] getPerfectNumbers(int max) { - if (max < 6){ + if (max < 6) { return new int[0]; } @@ -285,28 +283,27 @@ public int[] getPerfectNumbers(int max) { int count = 0; for (int i = 6; i < max; i++) { - if (isPerfectNumber(i)){ + if (isPerfectNumber(i)) { pns[count] = i; count = count + 1; } } - int[] result = new int[count]; System.arraycopy(pns, 0, result, 0, count); return result; } - private boolean isPerfectNumber(int a){ - if(a < 6){ + private boolean isPerfectNumber(int a) { + if (a < 6) { return false; } int sum = 0; for (int i = 1; i < a; i++) { - if(a % i == 0){ + if (a % i == 0) { sum = sum + i; } } @@ -315,7 +312,6 @@ private boolean isPerfectNumber(int a){ } - /** * 用seperator 把数组 array给连接起来 * 例如array= [3,8,9], seperator = "-" @@ -324,10 +320,10 @@ private boolean isPerfectNumber(int a){ * @param array * @return */ - public static String join(int[] array, String seperator) { + public static String join(int[] array, String seperator) { String result = ""; for (int i = 0; i < array.length; i++) { - result = result + array[i] + seperator ; + result = result + array[i] + seperator; } result = result.substring(0, result.length() - 1); diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/list/Iterator.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/list/Iterator.java index d6122132cc..40a7323be0 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/list/Iterator.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/list/Iterator.java @@ -1,10 +1,11 @@ package me.lzb.basic.list; /** - * Created by LZB on 2017/3/11. + * @author LZB */ public interface Iterator { - public boolean hasNext(); - public Object next(); + boolean hasNext(); + + Object next(); } diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/list/LinkedList.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/list/LinkedList.java index f55c92cdc6..02fcbb05ee 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/list/LinkedList.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/list/LinkedList.java @@ -3,7 +3,8 @@ /** * 简易LinkedList - * Created by LZB on 2017/3/11. + * + * @author LZB */ public class LinkedList implements List { @@ -32,7 +33,7 @@ public Node(Object data, Node next) { } -// public void add(int i) { + // public void add(int i) { // if (first == null) { // first = new Node(null, null, i); // last = first; @@ -100,7 +101,7 @@ public void add(int index, Object o) throws IndexOutOfBoundsException { } - private Node getNode(int index){ + private Node getNode(int index) { if (size == 0 || index < 0 || index >= size) { throw new IndexOutOfBoundsException("index boom"); } @@ -159,12 +160,6 @@ public Object remove(int index) { } - - - - - - public int size() { return size; } @@ -231,7 +226,7 @@ public void reverse() { //还可以用堆栈 先进后出 - if(size() <= 1){ + if (size() <= 1) { return; } Object[] array = new Object[size]; @@ -242,7 +237,7 @@ public void reverse() { } this.first = null; this.last = null; - for (int i = array.length - 1; i >= 0 ; i--) { + for (int i = array.length - 1; i >= 0; i--) { add(array[i]); } @@ -255,10 +250,10 @@ public void reverse() { */ public void removeFirstHalf() { - if (size <= 1){ + if (size <= 1) { return; } - int b = size/ 2; + int b = size / 2; Node n = getNode(b); this.first = n; size = (size % 2) + b; @@ -271,21 +266,21 @@ public void removeFirstHalf() { * @param length */ public void remove(int i, int length) { - if (size == 0 || i < 0 || i >= size){ + if (size == 0 || i < 0 || i >= size) { return; } length = size - i >= length ? length : size - i; - if(i + length == size){ + if (i + length == size) { this.first = null; this.last = null; size = 0; return; } - if(i == 0){ + if (i == 0) { Node n = getNode(length); first = n; size = size - length; @@ -310,24 +305,23 @@ public void remove(int i, int length) { */ public int[] getElements(LinkedList list) { - if(size <= 0 || list.size() <= 0){ + if (size <= 0 || list.size() <= 0) { return new int[0]; } - int[] result = new int[list.size()]; Node tmp = list.first; int index = 0; Node tmp2 = first; for (int i = 0; i < list.size(); i++) { - int newIndex = (int)tmp.data; + int newIndex = (int) tmp.data; int maxJ = newIndex - index; for (int j = 0; j <= maxJ; j++) { - if(j == maxJ){ - result[i] = (int)tmp2.data; + if (j == maxJ) { + result[i] = (int) tmp2.data; break; } tmp2 = tmp2.next; @@ -356,19 +350,19 @@ public void subtract(LinkedList list) { } - public void remove(Object obj){ - if(size <= 0){ + public void remove(Object obj) { + if (size <= 0) { return; } - if(first.data.equals(obj)){ - first=first.next; + if (first.data.equals(obj)) { + first = first.next; size = size - 1; return; } Node tmp = first; Node tmp2 = first.next; for (int i = 1; i < size; i++) { - if(tmp2.data.equals(obj)){ + if (tmp2.data.equals(obj)) { tmp.next = tmp2.next; size = size - 1; return; @@ -385,16 +379,16 @@ public void remove(Object obj){ * 删除表中所有值相同的多余元素(使得操作后的线性表中所有元素的值均不相同) */ public void removeDuplicateValues() { - if(size <= 1){ + if (size <= 1) { return; } Node tmp = first; for (int i = 1; i < size; i++) { - if(tmp.next == null){ + if (tmp.next == null) { break; } - if (tmp.data.equals(tmp.next.data)){ + if (tmp.data.equals(tmp.next.data)) { tmp.next = tmp.next.next; } tmp = tmp.next; @@ -410,7 +404,7 @@ public void removeDuplicateValues() { * @param max */ public void removeRange(int min, int max) { - if(size <= 0){ + if (size <= 0) { return; } @@ -418,11 +412,11 @@ public void removeRange(int min, int max) { int a = -1; int b = -1; for (int i = 0; i < size; i++) { - if((int)tmp.data > min && a == -1){ + if ((int) tmp.data > min && a == -1) { a = i; } - if((int)tmp.data >= max && b == -1){ + if ((int) tmp.data >= max && b == -1) { b = i; } @@ -430,24 +424,23 @@ public void removeRange(int min, int max) { } - if(min < max){ + if (min < max) { remove(a, b - a); return; } - if(min == max){ + if (min == max) { } - if(min > max){ + if (min > max) { } - return; } @@ -460,27 +453,27 @@ public void removeRange(int min, int max) { public LinkedList intersection(LinkedList list) { LinkedList result = new LinkedList(); - if(list == null || list.size <= 0 || size <= 0){ + if (list == null || list.size <= 0 || size <= 0) { return result; } int i1 = 0; int i2 = 0; - while( i1 < this.size && i2 - * Created by LZB on 2017/4/27. + * + * @author LZB */ public class CircleQueue { - public CircleQueue(){ + public CircleQueue() { DEFAULT_SIZE = 10; } - public CircleQueue(int size){ - if(size <= 0){ + public CircleQueue(int size) { + if (size <= 0) { size = 10; } DEFAULT_SIZE = size; diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/queue/Josephus.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/queue/Josephus.java index 8fcddcfb2c..0b2278e652 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/queue/Josephus.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/queue/Josephus.java @@ -6,7 +6,8 @@ * 用Queue来实现Josephus问题 * 在这个古老的问题当中, N个深陷绝境的人一致同意用这种方式减少生存人数: N个人围成一圈(位置记为0到N-1), 并且从第一个人报数, 报到M的人会被杀死, 直到最后一个人留下来 * 该方法返回一个List, 包含了被杀死人的次序 - * Created by LZB on 2017/4/27. + * + * @author LZB */ public class Josephus { diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/queue/Queue.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/queue/Queue.java index b1ef522855..cacdc8e028 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/queue/Queue.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/queue/Queue.java @@ -4,30 +4,31 @@ /** * 先进先出 - * Created by LZB on 2017/3/11. + * + * @author LZB */ public class Queue { - LinkedList elementData = new LinkedList(); + LinkedList elementData = new LinkedList(); - public void enQueue(Object o){ - elementData.add(o); - } + public void enQueue(Object o) { + elementData.add(o); + } - public Object deQueue() throws IndexOutOfBoundsException{ - if(isEmpty()){ - throw new IndexOutOfBoundsException("index boom"); - } - return elementData.remove(elementData.size() - 1); - } + public Object deQueue() throws IndexOutOfBoundsException { + if (isEmpty()) { + throw new IndexOutOfBoundsException("index boom"); + } + return elementData.remove(elementData.size() - 1); + } - public boolean isEmpty(){ - if(elementData.size() <= 0){ - return true; - } - return false; - } + public boolean isEmpty() { + if (elementData.size() <= 0) { + return true; + } + return false; + } - public int size(){ - return elementData.size(); - } + public int size() { + return elementData.size(); + } } diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/queue/QueueWithTwoStacks.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/queue/QueueWithTwoStacks.java index 65c3b45fae..dcb8b52701 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/queue/QueueWithTwoStacks.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/queue/QueueWithTwoStacks.java @@ -4,7 +4,8 @@ /** * 用两个栈来实现一个队列 - * Created by LZB on 2017/4/27. + * + * @author LZB */ public class QueueWithTwoStacks { private Stack stack1;//ASC diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/stack/QuickMinStack.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/stack/QuickMinStack.java index d6250bae89..7bf7dcb833 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/stack/QuickMinStack.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/stack/QuickMinStack.java @@ -5,6 +5,8 @@ /** * 设计一个栈,支持栈的push和pop操作,以及第三种操作findMin, 它返回改数据结构中的最小元素 * finMin操作最坏的情形下时间复杂度应该是O(1) , 简单来讲,操作一次就可以得到最小值 + * + * @author LZB */ public class QuickMinStack { private int mini; diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/stack/Stack.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/stack/Stack.java index a5469ff8ce..d76eabc3c4 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/stack/Stack.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/stack/Stack.java @@ -4,7 +4,8 @@ /** * 先进后出 - * Created by LZB on 2017/3/11. + * + * @author LZB */ public class Stack { private ArrayList elementData = new ArrayList(); diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/stack/StackUtil.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/stack/StackUtil.java index f728f54630..3563871cea 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/stack/StackUtil.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/stack/StackUtil.java @@ -2,6 +2,9 @@ import java.util.Stack; +/** + * @author LZB + */ public class StackUtil { public static void bad_reverse(Stack s) { diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/stack/TwoStackInOneArray.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/stack/TwoStackInOneArray.java index 4e76b55a7b..1dbc04dbb2 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/stack/TwoStackInOneArray.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/stack/TwoStackInOneArray.java @@ -3,6 +3,8 @@ /** * 用一个数组实现两个栈 * 将数组的起始位置看作是第一个栈的栈底,将数组的尾部看作第二个栈的栈底,压栈时,栈顶指针分别向中间移动,直到两栈顶指针相遇,则扩容。 + * + * @author LZB */ public class TwoStackInOneArray { private final int growsize = 10; diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/tree/BTNode.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/tree/BTNode.java deleted file mode 100644 index ee0b9d6e33..0000000000 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/tree/BTNode.java +++ /dev/null @@ -1,53 +0,0 @@ -package me.lzb.basic.tree; - -/** - * 左边比父节点小,右边比父节点大 - * Created by LZB on 2017/3/11. - */ -public class BTNode { - - private int data; - private BTNode left; - private BTNode right; - - public BTNode(int data){ - this.data = data; - } - - public int getData() { - return data; - } - - - //这层满了就下一层继续add,直到找到空位 - public void add(int d){ - BTNode b = new BTNode(d); - if(compareTo(b)){ - //比父节点小,左边 - if(this.left == null){ - this.left = b; - }else { - this.left.add(d); - } - - }else {//相等不考虑 - //比父节点大,右边 - if(this.right == null){ - this.right = b; - }else { - this.right.add(d); - } - - } - } - - - public boolean compareTo(BTNode node){ - if(this.data > node.getData()){ - return true; - } - return false; - } - - -} diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/tree/BinarySearchTree.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/tree/BinarySearchTree.java new file mode 100644 index 0000000000..88922462a7 --- /dev/null +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/tree/BinarySearchTree.java @@ -0,0 +1,209 @@ +package me.lzb.basic.tree; + +/** + * @author LZB + */ +public class BinarySearchTree> { + BinaryTreeNode root; + + public BinarySearchTree(BinaryTreeNode root) { + this.root = root; + } + + public BinaryTreeNode getRoot() { + return root; + } + + public T findMin() { + if (this.root == null) { + throw new RuntimeException("empty tree"); + } + return getMinNode(this.root).getData(); + } + + public T findMax() { + if (this.root == null) { + throw new RuntimeException("empty tree"); + } + return getMaxNode(this.root).getData(); + } + + private BinaryTreeNode getMinNode(BinaryTreeNode node) { + if (node == null) { + return node; + } + + if (node.getLeft() == null) { + return node; + } + return getMinNode(node.getLeft()); + } + + private BinaryTreeNode getMaxNode(BinaryTreeNode node) { + if (node == null) { + return node; + } + + if (node.getRight() == null) { + return node; + } + + return getMaxNode(node.getRight()); + } + + + public int height() { + return getHeight(root, 0); + } + + private int getHeight(BinaryTreeNode node, int h) { + if (node == null) { + return h; + } + + int lh = getHeight(node.getLeft(), h + 1); + int rh = getHeight(node.getRight(), h + 1); + + return lh > rh ? lh : rh; + } + + + public int size() { + return getSize(root, 1); + } + + private int getSize(BinaryTreeNode node, int s) { + if (node == null) { + return s - 1; + } + + s = getSize(node.getLeft(), s + 1); + s = getSize(node.getRight(), s + 1); + + return s; + } + + public void remove(T t) { + BinaryTreeNode node = getFatherNode(root, t); + removeNode(node, t); + } + + + private void removeNode(BinaryTreeNode father, T t) { + if (father == null) { + return; + } + + //移除左子节点 + if (father.getLeft() != null && father.getLeft().getData().equals(t)) { + BinaryTreeNode remove = father.getLeft(); + BinaryTreeNode l = remove.getLeft(); + BinaryTreeNode r = remove.getRight(); + + //被删除节点没有子节点,直接删除 + if (l == null && r == null) { + father.setLeft(null); + return; + } + + //被删除节点有一个子节点,用非空子节点顶替被删除节点 + if (l == null) { + father.setLeft(r); + return; + } + + if (r == null) { + father.setLeft(l); + return; + } + + + //被删除节点有两个子节点 + //右子树的最小节点,顶替被删除位置 + BinaryTreeNode rm = getMinNode(r); + BinaryTreeNode rmf = getFatherNode(r, rm.getData()); + rmf.setLeft(null); + father.setLeft(rm); + rm.setLeft(l); + rm.setRight(r); + + + return; + + } + + + //移除右子节点 + if (father.getRight() != null && father.getRight().getData().equals(t)) { + BinaryTreeNode remove = father.getRight(); + BinaryTreeNode l = remove.getLeft(); + BinaryTreeNode r = remove.getRight(); + + if (l == null && r == null) { + father.setRight(null); + return; + } + + if (l == null) { + father.setRight(r); + return; + } + + + if (r == null) { + father.setRight(l); + return; + } + + + BinaryTreeNode rm = getMinNode(r); + BinaryTreeNode rmf = getFatherNode(r, rm.getData()); + rmf.setLeft(null); + father.setRight(rm); + rm.setLeft(l); + rm.setRight(r); + return; + } + + + } + + + private BinaryTreeNode getFatherNode(BinaryTreeNode node, T t) { + if (node == null) { + return node; + } + if (node.getLeft() != null && node.getLeft().getData().equals(t)) { + return node; + } + + if (node.getRight() != null && node.getRight().getData().equals(t)) { + return node; + } + if (t.compareTo(node.getData()) > 0) { + return getFatherNode(node.getRight(), t); + } else { + return getFatherNode(node.getLeft(), t); + } + } + + private BinaryTreeNode getNode(BinaryTreeNode node, T t) { + if (node == null) { + return node; + } + + + if (node.getData().equals(t)) { + return node; + } + + if (t.compareTo(node.getData()) > 0) { + return getNode(node.getRight(), t); + } else { + return getNode(node.getLeft(), t); + } + + } + + +} diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/tree/BinaryTreeNode.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/tree/BinaryTreeNode.java index fc56ca100f..add0443e9a 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/tree/BinaryTreeNode.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/tree/BinaryTreeNode.java @@ -3,7 +3,7 @@ /** * @author LZB */ -public class BinaryTreeNode { +public class BinaryTreeNode> { private T data; private BinaryTreeNode left; private BinaryTreeNode right; @@ -36,8 +36,49 @@ public void setRight(BinaryTreeNode right) { this.right = right; } - public BinaryTreeNode insert(Object o) { - return null; + + /** + * 左边比父节点小,右边比父节点大 + * 这层满了就下一层继续add,直到找到空位 + * + * @param d data + */ + public void insert(T d) { + BinaryTreeNode b = new BinaryTreeNode(d); + if (isSmaller(d)) { + //比父节点小,左边 + if (this.left == null) { + this.left = b; + } else { + this.left.insert(d); + } + + } else {//相等不考虑 + //比父节点大,右边 + if (this.right == null) { + this.right = b; + } else { + this.right.insert(d); + } + + } + } + + /** + * 是否比当前节点的data小 + * + * @param d data + * @return true false + */ + private boolean isSmaller(T d) { + return this.data.compareTo(d) > 0; + } + + @Override + public String toString() { +// return getLeft() != null ? getLeft().getData().toString() : "" + ":" + getData().toString() + ":" + getRight() != null ? getRight().getData().toString() : ""; + return getData().toString(); } + } diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/tree/BinaryTreeUtil.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/tree/BinaryTreeUtil.java index c5543271ad..95e5fb64fe 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/tree/BinaryTreeUtil.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/basic/tree/BinaryTreeUtil.java @@ -18,7 +18,7 @@ public class BinaryTreeUtil { * @param root * @return */ - public static List preOrderVisit(BinaryTreeNode root) { + public static > List preOrderVisit(BinaryTreeNode root) { List result = new ArrayList<>(); preOrderVisit(root, result); return result; @@ -43,7 +43,7 @@ private static void preOrderVisit(BinaryTreeNode root, List result) { * @param root * @return */ - public static List inOrderVisit(BinaryTreeNode root) { + public static > List inOrderVisit(BinaryTreeNode root) { List result = new ArrayList<>(); inOrderVisit(root, result); return result; @@ -67,7 +67,7 @@ private static void inOrderVisit(BinaryTreeNode root, List result) { * @param root * @return */ - public static List postOrderVisit(BinaryTreeNode root) { + public static > List postOrderVisit(BinaryTreeNode root) { List result = new ArrayList<>(); postOrderVisit(root, result); return result; @@ -90,7 +90,7 @@ private static void postOrderVisit(BinaryTreeNode root, List result) { * @param root * @return */ - public static List preOrderWithoutRecursion(BinaryTreeNode root) { + public static > List preOrderWithoutRecursion(BinaryTreeNode root) { List result = new ArrayList<>(); Stack> stack = new Stack<>(); @@ -118,7 +118,7 @@ public static List preOrderWithoutRecursion(BinaryTreeNode root) { * @param root * @return */ - public static List inOrderWithoutRecursion(BinaryTreeNode root) { + public static > List inOrderWithoutRecursion(BinaryTreeNode root) { List result = new ArrayList<>(); Stack> stack = new Stack<>(); @@ -143,7 +143,7 @@ public static List inOrderWithoutRecursion(BinaryTreeNode root) { * @param root * @return */ - public static List postOrderWithoutRecursion(BinaryTreeNode root) { + public static > List postOrderWithoutRecursion(BinaryTreeNode root) { List result = new ArrayList<>(); Stack> stack = new Stack<>(); diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/boom/BoomClassLoader.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/boom/BoomClassLoader.java new file mode 100644 index 0000000000..e72388e169 --- /dev/null +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/boom/BoomClassLoader.java @@ -0,0 +1,41 @@ +package me.lzb.boom; + +import me.lzb.common.utils.FileUtils; + +import java.io.File; +import java.io.IOException; + +/** + * @author LZB + */ +public class BoomClassLoader extends ClassLoader { + + + //类加载器的名称 + private String name; + private String path; + + BoomClassLoader(String name, String path) { + this.name = name; + this.path = path; + } + + BoomClassLoader(ClassLoader parent, String name) { + super(parent); + this.name = name; + } + + /** + * 重写findClass方法 + */ + @Override + public Class findClass(String name) { + byte[] data = new byte[0]; + try { + data = FileUtils.readByteCodes(path + name.replace('.', File.separatorChar) + ".class"); + } catch (IOException e) { + } + return this.defineClass(name, data, 0, data.length); + } + +} diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/boom/MemoryBoom.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/boom/MemoryBoom.java new file mode 100644 index 0000000000..7988d27c7c --- /dev/null +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/boom/MemoryBoom.java @@ -0,0 +1,47 @@ +package me.lzb.boom; + + +import java.util.ArrayList; +import java.util.List; + +/** + * @author LZB + */ +public class MemoryBoom { + + //-XX:MaxMetaspaceSize,最大空间,默认没有限制 + //-XX:MetaspaceSize,初始空间大小,达到该值就会触发垃圾收集进行类型卸载,同时GC会对该值进行调整。如果释放了大量的空间,就适当降低该值;如果释放了很少的空间,那么在不超过MaxMetaspaceSize时,适当提高该值。 + //-XX:MinMetaspaceFreeRatio,在GC之后,最小的Metaspace剩余空间容量的百分比,减少为分配空间所导致的垃圾收集 + //-XX:MaxMetaspaceFreeRatio,在GC之后,最大的Metaspace剩余空间容量的百分比,减少为释放空间所导致的垃圾收集 + public void metaspaceBoom() { + String path = MemoryBoom.class.getResource("/").getPath(); + String className = "me.lzb.boom.Boom"; + List list = new ArrayList(); + while (true) { + BoomClassLoader classLoader = new BoomClassLoader("boom", path); + Class cls = classLoader.findClass(className); +// try { +// list.add(cls.newInstance()); +// } catch (InstantiationException e) { +// e.printStackTrace(); +// } catch (IllegalAccessException e) { +// e.printStackTrace(); +// } + } + + } + + + public void outOfMemoryBoom() { + List list = new ArrayList(); + while (true) { + list.add(new MemoryBoom()); + } + } + + public void stackOverflowBoom() { + stackOverflowBoom(); + } + + +} diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/DownloadThread.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/DownloadThread.java index 9db5e9fc86..163d5d72e5 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/DownloadThread.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/DownloadThread.java @@ -5,6 +5,9 @@ import java.io.RandomAccessFile; import java.util.concurrent.CyclicBarrier; +/** + * @author LZB + */ public class DownloadThread extends Thread { Connection conn; diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/api/Connection.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/api/Connection.java index 17413ca23b..d66e3c71af 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/api/Connection.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/api/Connection.java @@ -2,22 +2,28 @@ import java.io.IOException; +/** + * @author LZB + */ public interface Connection { - /** - * 给定开始和结束位置, 读取数据, 返回值是字节数组 - * @param startPos 开始位置, 从0开始 - * @param endPos 结束位置 - * @return - */ - byte[] read(int startPos, int endPos) throws IOException; - /** - * 得到数据内容的长度 - * @return - */ - int getContentLength(); + /** + * 给定开始和结束位置, 读取数据, 返回值是字节数组 + * + * @param startPos 开始位置, 从0开始 + * @param endPos 结束位置 + * @return + */ + byte[] read(int startPos, int endPos) throws IOException; - /** - * 关闭连接 - */ - void close(); + /** + * 得到数据内容的长度 + * + * @return + */ + int getContentLength(); + + /** + * 关闭连接 + */ + void close(); } diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/api/ConnectionManager.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/api/ConnectionManager.java index abec231748..0afdc179f7 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/api/ConnectionManager.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/api/ConnectionManager.java @@ -1,10 +1,14 @@ package me.lzb.download.api; +/** + * @author LZB + */ public interface ConnectionManager { - /** - * 给定一个url , 打开一个连接 - * @param url - * @return - */ - Connection open(String url) throws ConnectionException; + /** + * 给定一个url , 打开一个连接 + * + * @param url + * @return + */ + Connection open(String url) throws ConnectionException; } diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/impl/ConnectionImpl.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/impl/ConnectionImpl.java index 6fc42341db..566263d6df 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/impl/ConnectionImpl.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/impl/ConnectionImpl.java @@ -13,7 +13,9 @@ import java.io.InputStream; import java.util.Arrays; - +/** + * @author LZB + */ class ConnectionImpl implements Connection { @@ -24,22 +26,21 @@ class ConnectionImpl implements Connection { CloseableHttpClient httpClient; - - public ConnectionImpl(String url) throws ConnectionException{ + public ConnectionImpl(String url) throws ConnectionException { httpget = new HttpGet(url); httpget.setHeader("Accept-Encoding", "identity"); httpClient = HttpClients.createDefault(); } - @Override - public byte[] read(int startPos, int endPos) throws IOException { + @Override + public byte[] read(int startPos, int endPos) throws IOException { httpget.removeHeaders("Range"); httpget.addHeader("Range", "bytes=" + startPos + "-" + endPos); CloseableHttpResponse response = httpClient.execute(httpget); - InputStream inputStream = response.getEntity().getContent(); + InputStream inputStream = response.getEntity().getContent(); byte[] buff = new byte[BUFFER_SIZE]; @@ -47,25 +48,25 @@ public byte[] read(int startPos, int endPos) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); - while(baos.size() < lenth){ + while (baos.size() < lenth) { int len = inputStream.read(buff); if (len < 0) { break; } - baos.write(buff,0, len); + baos.write(buff, 0, len); } - if(baos.size() > lenth){ + if (baos.size() > lenth) { byte[] data = baos.toByteArray(); return Arrays.copyOf(data, lenth); } return baos.toByteArray(); - } + } - @Override - public int getContentLength() { + @Override + public int getContentLength() { CloseableHttpResponse response; try { @@ -80,13 +81,10 @@ public int getContentLength() { return (int) httpEntity.getContentLength(); } - @Override - public void close() { + @Override + public void close() { } - - - } diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/impl/ConnectionManagerImpl.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/impl/ConnectionManagerImpl.java index d450f5aa92..9a16b49e93 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/impl/ConnectionManagerImpl.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/download/impl/ConnectionManagerImpl.java @@ -5,6 +5,9 @@ import me.lzb.download.api.ConnectionException; import me.lzb.download.api.ConnectionManager; +/** + * @author LZB + */ public class ConnectionManagerImpl implements ConnectionManager { diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/litestruts/LoginAction.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/litestruts/LoginAction.java index 4f89670db2..daea435a20 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/litestruts/LoginAction.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/litestruts/LoginAction.java @@ -3,9 +3,10 @@ /** * 这是一个用来展示登录的业务类, 其中的用户名和密码都是硬编码 * + * @author LZB */ -public class LoginAction{ - private String name ; +public class LoginAction { + private String name; private String password; private String message; @@ -17,22 +18,24 @@ public String getPassword() { return password; } - public String execute(){ - if("test".equals(name) && "1234".equals(password)){ - this.message = "login successful"; - return "success"; - } - this.message = "login failed,please check your user/pwd"; - return "fail"; + public String execute() { + if ("test".equals(name) && "1234".equals(password)) { + this.message = "login successful"; + return "success"; + } + this.message = "login failed,please check your user/pwd"; + return "fail"; } - public void setName(String name){ + public void setName(String name) { this.name = name; } - public void setPassword(String password){ + + public void setPassword(String password) { this.password = password; } - public String getMessage(){ + + public String getMessage() { return this.message; } } diff --git a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/litestruts/Struts.java b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/litestruts/Struts.java index 7841100872..dc6ce3f1a5 100644 --- a/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/litestruts/Struts.java +++ b/group24/1148285693/learning2017/learning-basic/src/main/java/me/lzb/litestruts/Struts.java @@ -29,14 +29,16 @@ */ - +/** + * @author LZB + */ public class Struts { private static final String XML = "struts.xml"; private static final XmlUtil resource = createResource(XML); - private static XmlUtil createResource(String xml){ + private static XmlUtil createResource(String xml) { try { return new XmlUtil(xml); } catch (DocumentException e) { @@ -46,7 +48,7 @@ private static XmlUtil createResource(String xml){ } - public static View runAction(String actionName, Map parameters) throws ClassNotFoundException, IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchMethodException { + public static View runAction(String actionName, Map parameters) throws ClassNotFoundException, IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchMethodException { Object loginAction = getAuctionByName(actionName); @@ -58,7 +60,7 @@ public static View runAction(String actionName, Map parameters) t view.setJsp(resource.getResultJsp(actionName, resultName)); view.setParameters(invokeGetMethods(loginAction)); - return view; + return view; } private static Object getAuctionByName(String auctionName) throws ClassNotFoundException, IllegalAccessException, InstantiationException { @@ -74,14 +76,14 @@ private static Object invokeExecute(Object o) throws NoSuchMethodException, Invo } - private static void invokeSetMethods(Object o, Map parameteMap) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { + private static void invokeSetMethods(Object o, Map parameteMap) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException { Class c = o.getClass(); - Method[] methods = c.getDeclaredMethods(); - for (int i = 0; i< methods.length; i++) { + Method[] methods = c.getDeclaredMethods(); + for (int i = 0; i < methods.length; i++) { String name = methods[i].getName(); - if(StringUtils.startsWith(name, "set")){ + if (StringUtils.startsWith(name, "set")) { String key = name.replaceAll("^set", "").toLowerCase(); - if(parameteMap.containsKey(key)){ + if (parameteMap.containsKey(key)) { methods[i].invoke(o, parameteMap.get(key)); } } @@ -99,12 +101,12 @@ private static Map invokeGetMethods(Object o) throws InvocationTargetException, Map resultMap = new HashMap(); Class c = o.getClass(); Method[] methods = c.getDeclaredMethods(); - for(int i =0 ;i s = new Stack(); - s.push(1); - s.push(2); - s.push(3); + @Test + public void testAddToBottom() { + Stack s = new Stack(); + s.push(1); + s.push(2); + s.push(3); - StackUtil.addToBottom(s, 0); + StackUtil.addToBottom(s, 0); - Assert.assertEquals("[0, 1, 2, 3]", s.toString()); + Assert.assertEquals("[0, 1, 2, 3]", s.toString()); - } - @Test - public void testReverse() { - Stack s = new Stack(); - s.push(1); - s.push(2); - s.push(3); - s.push(4); - s.push(5); - Assert.assertEquals("[1, 2, 3, 4, 5]", s.toString()); - StackUtil.reverse(s); - Assert.assertEquals("[5, 4, 3, 2, 1]", s.toString()); - } + } - @Test - public void testRemove() { - Stack s = new Stack(); - s.push(1); - s.push(2); - s.push(3); - StackUtil.remove(s, 2); - Assert.assertEquals("[1, 3]", s.toString()); - } + @Test + public void testReverse() { + Stack s = new Stack(); + s.push(1); + s.push(2); + s.push(3); + s.push(4); + s.push(5); + Assert.assertEquals("[1, 2, 3, 4, 5]", s.toString()); + StackUtil.reverse(s); + Assert.assertEquals("[5, 4, 3, 2, 1]", s.toString()); + } + + @Test + public void testRemove() { + Stack s = new Stack(); + s.push(1); + s.push(2); + s.push(3); + StackUtil.remove(s, 2); + Assert.assertEquals("[1, 3]", s.toString()); + } - @Test - public void testGetTop() { - Stack s = new Stack(); - s.push(1); - s.push(2); - s.push(3); - s.push(4); - s.push(5); - { - Object[] values = StackUtil.getTop(s, 3); - Assert.assertEquals(5, values[0]); - Assert.assertEquals(4, values[1]); - Assert.assertEquals(3, values[2]); - } + @Test + public void testGetTop() { + Stack s = new Stack(); + s.push(1); + s.push(2); + s.push(3); + s.push(4); + s.push(5); + { + Object[] values = StackUtil.getTop(s, 3); + Assert.assertEquals(5, values[0]); + Assert.assertEquals(4, values[1]); + Assert.assertEquals(3, values[2]); + } Assert.assertEquals("[1, 2, 3, 4, 5]", s.toString()); - } + } - @Test - public void testIsValidPairs() { - Assert.assertTrue(StackUtil.isValidPairs("([e{d}f])")); - Assert.assertFalse(StackUtil.isValidPairs("([b{x]y})")); - } + @Test + public void testIsValidPairs() { + Assert.assertTrue(StackUtil.isValidPairs("([e{d}f])")); + Assert.assertFalse(StackUtil.isValidPairs("([b{x]y})")); + } } diff --git a/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/basic/tree/BinarySearchTreeTest.java b/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/basic/tree/BinarySearchTreeTest.java new file mode 100644 index 0000000000..0744eecd67 --- /dev/null +++ b/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/basic/tree/BinarySearchTreeTest.java @@ -0,0 +1,66 @@ +package me.lzb.basic.tree; + +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +/** + * @author LZB + */ +public class BinarySearchTreeTest { + BinarySearchTree tree = null; + + @Before + public void setUp() throws Exception { + BinaryTreeNode root = new BinaryTreeNode<>(6); + root.insert(2); + root.insert(8); + root.insert(1); + root.insert(4); + root.insert(3); + tree = new BinarySearchTree<>(root); + } + + @After + public void tearDown() throws Exception { + tree = null; + } + + @Test + public void testFindMin() { + Assert.assertEquals(1, tree.findMin().intValue()); + + } + + @Test + public void testFindMax() { + Assert.assertEquals(8, tree.findMax().intValue()); + } + + @Test + public void testHeight() { + Assert.assertEquals(4, tree.height()); + } + + @Test + public void testSize() { + Assert.assertEquals(6, tree.size()); + } + + @Test + public void testRemoveLeaf() { + tree.remove(4); + BinaryTreeNode root = tree.getRoot(); + Assert.assertEquals(3, root.getLeft().getRight().getData().intValue()); + + } + + @Test + public void testRemoveMiddleNode() { + tree.remove(2); + BinaryTreeNode root = tree.getRoot(); + Assert.assertEquals(3, root.getLeft().getData().intValue()); + Assert.assertEquals(4, root.getLeft().getRight().getData().intValue()); + } +} diff --git a/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/basic/tree/BinaryTreeUtilTest.java b/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/basic/tree/BinaryTreeUtilTest.java index 6656fdfc4a..298072f91c 100644 --- a/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/basic/tree/BinaryTreeUtilTest.java +++ b/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/basic/tree/BinaryTreeUtilTest.java @@ -54,7 +54,6 @@ public void testPostOrderVisit() { } - @Test public void testPreOrderVisitWithoutRecursion() { BinaryTreeNode node = root.getLeft().getRight(); diff --git a/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/boom/Boom.java b/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/boom/Boom.java new file mode 100644 index 0000000000..5bf215797d --- /dev/null +++ b/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/boom/Boom.java @@ -0,0 +1,7 @@ +package me.lzb.boom; + +/** + * @author LZB + */ +public class Boom { +} diff --git a/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/boom/BoomTest.java b/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/boom/BoomTest.java new file mode 100644 index 0000000000..92fba0e250 --- /dev/null +++ b/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/boom/BoomTest.java @@ -0,0 +1,41 @@ +package me.lzb.boom; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +/** + * @author LZB + */ +public class BoomTest { + + private MemoryBoom boom; + + @Rule + public ExpectedException thrown = ExpectedException.none(); + + @Before + public void instantiate() throws Exception { + boom = new MemoryBoom(); + } + + @Test + public void metaspaceBoomTest() { + boom.metaspaceBoom(); + } + + @Test + public void outOfMemoryBoomTest() { + thrown.expect(OutOfMemoryError.class); + thrown.expectMessage("Java heap space"); + boom.outOfMemoryBoom(); + } + + + @Test + public void stackOverflowBoomTest() { + thrown.expect(StackOverflowError.class); + boom.stackOverflowBoom(); + } +} diff --git a/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/download/ConnectionTest.java b/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/download/ConnectionTest.java index 884c309765..0fdd6d4a9d 100644 --- a/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/download/ConnectionTest.java +++ b/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/download/ConnectionTest.java @@ -9,7 +9,7 @@ import org.junit.Test; /** - * Created by LZB on 2017/3/27. + * @author LZB */ public class ConnectionTest { @@ -25,7 +25,7 @@ public void tearDown() throws Exception { } @Test - public void testContentLength() throws Exception{ + public void testContentLength() throws Exception { ConnectionManager connMan = new ConnectionManagerImpl(); Connection conn = connMan.open(imageUrl); Assert.assertEquals(3440179, conn.getContentLength()); @@ -33,7 +33,7 @@ public void testContentLength() throws Exception{ } @Test - public void testRead() throws Exception{ + public void testRead() throws Exception { ConnectionManager connMan = new ConnectionManagerImpl(); Connection conn = connMan.open(imageUrl); diff --git a/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/download/FileDownloaderTest.java b/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/download/FileDownloaderTest.java index 76c3edf432..1093ea8a88 100644 --- a/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/download/FileDownloaderTest.java +++ b/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/download/FileDownloaderTest.java @@ -7,6 +7,9 @@ import org.junit.Before; import org.junit.Test; +/** + * @author LZB + */ public class FileDownloaderTest { private static final String imageUrl = "https://wallpapers.wallhaven.cc/wallpapers/full/wallhaven-499994.png"; diff --git a/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/litestruts/StrutsTest.java b/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/litestruts/StrutsTest.java index a970d742b4..ea0079e841 100644 --- a/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/litestruts/StrutsTest.java +++ b/group24/1148285693/learning2017/learning-basic/src/test/java/me/lzb/litestruts/StrutsTest.java @@ -7,35 +7,37 @@ import java.util.Map; - +/** + * @author LZB + */ public class StrutsTest { - @Test - public void testLoginActionSuccess() throws Exception{ + @Test + public void testLoginActionSuccess() throws Exception { - String actionName = "login"; + String actionName = "login"; - Map params = new HashMap(); - params.put("name","test"); - params.put("password","1234"); + Map params = new HashMap(); + params.put("name", "test"); + params.put("password", "1234"); - View view = Struts.runAction(actionName,params); + View view = Struts.runAction(actionName, params); Assert.assertEquals("/jsp/homepage.jsp", view.getJsp()); Assert.assertEquals("login successful", view.getParameters().get("message")); - } + } - @Test - public void testLoginActionFailed() throws Exception{ - String actionName = "login"; - Map params = new HashMap(); - params.put("name","test"); - params.put("password","123456"); //密码和预设的不一致 + @Test + public void testLoginActionFailed() throws Exception { + String actionName = "login"; + Map params = new HashMap(); + params.put("name", "test"); + params.put("password", "123456"); //密码和预设的不一致 - View view = Struts.runAction(actionName,params); + View view = Struts.runAction(actionName, params); Assert.assertEquals("/jsp/showLogin.jsp", view.getJsp()); Assert.assertEquals("login failed,please check your user/pwd", view.getParameters().get("message")); - } + } } diff --git a/group24/1148285693/learning2017/learning-basic/src/test/resources/litestruts/struts.xml b/group24/1148285693/learning2017/learning-basic/src/test/resources/litestruts/struts.xml index a4859a04b2..f1d2ecf51a 100644 --- a/group24/1148285693/learning2017/learning-basic/src/test/resources/litestruts/struts.xml +++ b/group24/1148285693/learning2017/learning-basic/src/test/resources/litestruts/struts.xml @@ -5,7 +5,7 @@ /jsp/showLogin.jsp - /jsp/welcome.jsp - /jsp/error.jsp + /jsp/welcome.jsp + /jsp/error.jsp diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/attr/AttributeInfo.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/attr/AttributeInfo.java index fd000bdcb3..4e6637d897 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/attr/AttributeInfo.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/attr/AttributeInfo.java @@ -1,7 +1,7 @@ package me.lzb.jvm.attr; /** - * Created by LZB on 2017/4/15. + * @author LZB */ public abstract class AttributeInfo { diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/attr/CodeAttr.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/attr/CodeAttr.java index f2f30f004f..ae7bf5e0dd 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/attr/CodeAttr.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/attr/CodeAttr.java @@ -3,7 +3,7 @@ import me.lzb.jvm.cmd.ByteCodeCommand; /** - * Created by LZB on 2017/4/15. + * @author LZB */ public class CodeAttr extends AttributeInfo { private int maxStack; diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/attr/ConstantValue.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/attr/ConstantValue.java new file mode 100644 index 0000000000..07b1b9ea77 --- /dev/null +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/attr/ConstantValue.java @@ -0,0 +1,23 @@ +package me.lzb.jvm.attr; + +/** + * @author LZB + */ +public class ConstantValue extends AttributeInfo { + + private int constValueIndex; + + public ConstantValue(int attrNameIndex, int attrLen) { + super(attrNameIndex, attrLen); + } + + public int getConstValueIndex() { + return constValueIndex; + } + + public void setConstValueIndex(int constValueIndex) { + this.constValueIndex = constValueIndex; + } + + +} diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/attr/LineNumberItem.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/attr/LineNumberItem.java index e621cf925a..75e12e914c 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/attr/LineNumberItem.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/attr/LineNumberItem.java @@ -1,7 +1,7 @@ package me.lzb.jvm.attr; /** - * Created by LZB on 2017/4/16. + * @author LZB */ public class LineNumberItem { int startPC; diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/attr/LineNumberTable.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/attr/LineNumberTable.java index 5bf7b4759b..fdf248ec12 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/attr/LineNumberTable.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/attr/LineNumberTable.java @@ -4,7 +4,7 @@ import java.util.List; /** - * Created by LZB on 2017/4/15. + * @author LZB */ public class LineNumberTable extends AttributeInfo { List items = new ArrayList<>(); diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/attr/LocalVariableItem.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/attr/LocalVariableItem.java index decef772a3..9e2007d466 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/attr/LocalVariableItem.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/attr/LocalVariableItem.java @@ -1,7 +1,7 @@ package me.lzb.jvm.attr; /** - * Created by LZB on 2017/4/15. + * @author LZB */ public class LocalVariableItem { private int startPC; @@ -11,7 +11,7 @@ public class LocalVariableItem { private int index; - public LocalVariableItem(int startPC, int length, int nameIndex, int descIndex, int index){ + public LocalVariableItem(int startPC, int length, int nameIndex, int descIndex, int index) { this.startPC = startPC; this.length = length; this.nameIndex = nameIndex; diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/attr/LocalVariableTable.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/attr/LocalVariableTable.java index 9dca129d71..866c56b891 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/attr/LocalVariableTable.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/attr/LocalVariableTable.java @@ -4,7 +4,7 @@ import java.util.List; /** - * Created by LZB on 2017/4/15. + * @author LZB */ public class LocalVariableTable extends AttributeInfo { List items = new ArrayList<>(); diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/attr/StackMapTable.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/attr/StackMapTable.java index 0b8947bdf8..dca8db3ef5 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/attr/StackMapTable.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/attr/StackMapTable.java @@ -1,7 +1,7 @@ package me.lzb.jvm.attr; /** - * Created by LZB on 2017/4/15. + * @author LZB */ public class StackMapTable extends AttributeInfo { private String originalCode; diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/clz/AccessFlag.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/clz/AccessFlag.java index cfb4f067e8..60be506bd3 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/clz/AccessFlag.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/clz/AccessFlag.java @@ -1,7 +1,7 @@ package me.lzb.jvm.clz; /** - * Created by LZB on 2017/4/14. + * @author LZB */ public class AccessFlag { private int flagValue; @@ -26,10 +26,10 @@ public boolean isFinalClass() { return (this.flagValue & 0x0010) != 0; } - public String getFlagString(){ - if (isPublicClass()){ + public String getFlagString() { + if (isPublicClass()) { return "public"; - }else { + } else { return "not public"; } } diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/clz/ClassFile.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/clz/ClassFile.java index 32e0c24bdf..a1ec8604fb 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/clz/ClassFile.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/clz/ClassFile.java @@ -11,9 +11,9 @@ import java.util.List; /** - * Created by LZB on 2017/4/14. + * @author LZB */ -public class ClassFile implements Print{ +public class ClassFile implements Print { private String magicNumber; diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/clz/ClassIndex.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/clz/ClassIndex.java index 8916290057..df9b69fcba 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/clz/ClassIndex.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/clz/ClassIndex.java @@ -1,7 +1,7 @@ package me.lzb.jvm.clz; /** - * Created by LZB on 2017/4/14. + * @author LZB */ public class ClassIndex { private int thisClassIndex; diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/BiPushCmd.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/BiPushCmd.java index a662e9a6ff..77d5057870 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/BiPushCmd.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/BiPushCmd.java @@ -8,6 +8,9 @@ import me.lzb.jvm.engine.StackFrame; import me.lzb.jvm.print.ExecutionVisitor; +/** + * @author LZB + */ public class BiPushCmd extends OneOperandCmd { public BiPushCmd(ClassFile clzFile, String opCode) { diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/ByteCodeCommand.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/ByteCodeCommand.java index b79f7d7f2c..dd088d7dd7 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/ByteCodeCommand.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/ByteCodeCommand.java @@ -10,7 +10,9 @@ import java.util.HashMap; import java.util.Map; - +/** + * @author LZB + */ public abstract class ByteCodeCommand { String opCode; @@ -43,7 +45,8 @@ public abstract class ByteCodeCommand { public static final String freturn = "AE"; public static final String astore_1 = "4C"; - public static final String if_icmp_ge = "A2"; + public static final String if_icmpge = "A2"; + public static final String if_icmpgt = "A3"; public static final String if_icmple = "A4"; public static final String goto_no_condition = "A7"; public static final String iconst_0 = "03"; @@ -89,9 +92,9 @@ public abstract class ByteCodeCommand { codeMap.put(fload_2, "fload_2"); codeMap.put(astore_1, "astore_1"); - codeMap.put(if_icmp_ge, "if_icmp_ge"); + codeMap.put(if_icmpge, "if_icmpge"); codeMap.put(if_icmple, "if_icmple"); - + codeMap.put(if_icmpgt, "if_icmpgt"); codeMap.put("A7", "goto"); codeMap.put("B1", "return"); diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/ComparisonCmd.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/ComparisonCmd.java new file mode 100644 index 0000000000..735ad2b275 --- /dev/null +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/ComparisonCmd.java @@ -0,0 +1,80 @@ +package me.lzb.jvm.cmd; + +import me.lzb.jvm.clz.ClassFile; +import me.lzb.jvm.engine.ExecutionResult; +import me.lzb.jvm.engine.JavaObject; +import me.lzb.jvm.engine.StackFrame; +import me.lzb.jvm.print.ExecutionVisitor; + +/** + * @author LZB + */ +public class ComparisonCmd extends TwoOperandCmd { + + private int goOffset; + + public ComparisonCmd(ClassFile clzFile, String opCode) { + super(clzFile, opCode); + } + + @Override + public void execute(StackFrame frame, ExecutionResult result) { + + if (ByteCodeCommand.if_icmpge.equals(this.getOpCode())) { + JavaObject jo2 = frame.getOprandStack().pop(); + JavaObject jo1 = frame.getOprandStack().pop(); + + if (jo1.getIntValue() >= jo2.getIntValue()) { + setJumpResult(result); + } + + } else if (ByteCodeCommand.if_icmple.equals(this.getOpCode())) { + + JavaObject jo2 = frame.getOprandStack().pop(); + JavaObject jo1 = frame.getOprandStack().pop(); + + if (jo1.getIntValue() <= jo2.getIntValue()) { + setJumpResult(result); + } + + } else if (ByteCodeCommand.if_icmpgt.equals(this.getOpCode())) { + JavaObject jo2 = frame.getOprandStack().pop(); + JavaObject jo1 = frame.getOprandStack().pop(); + + if (jo1.getIntValue() > jo2.getIntValue()) { + setJumpResult(result); + } + } else if (ByteCodeCommand.goto_no_condition.equals(this.opCode)) { + setJumpResult(result); + } + } + + @Override + public void printExecute(ExecutionVisitor visitor) { + visitor.visitComparisonCmd(this); + } + + + private void setJumpResult(ExecutionResult result) { + int offsetFromStartCmd = getOffsetFromStartCmd(); + result.setNextAction(ExecutionResult.JUMP); + result.setNextCmdOffset(offsetFromStartCmd); + } + + private int getOffsetFromStartCmd() { +// 如果比较结果为真,那无符号 byte 型数据 branchbyte1 和 branchbyte2 用于构建一个 16 位有符号的分支偏移量,构建方式为(branchbyte1 << 8)| branchbyte2。 +// 指令执行后,程序将会转到这个 if_acmp指令之后的,由上述偏移量确定的目标地址上继续执行。这个目标地址必须处于if_acmp指令所在的方法之中。 + int index1 = this.getOprand1(); + int index2 = this.getOprand2(); + short offsetFromCurrent = (short) (index1 << 8 | index2); + return this.getOffset() + offsetFromCurrent; + } + + public int getGoOffset() { + return goOffset; + } + + public void setGoOffset(int goOffset) { + this.goOffset = goOffset; + } +} diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/GetFieldCmd.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/GetFieldCmd.java index 27429d0695..bec2f7444a 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/GetFieldCmd.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/GetFieldCmd.java @@ -8,6 +8,9 @@ import me.lzb.jvm.engine.StackFrame; import me.lzb.jvm.print.ExecutionVisitor; +/** + * @author LZB + */ public class GetFieldCmd extends TwoOperandCmd { public GetFieldCmd(ClassFile clzFile, String opCode) { @@ -22,7 +25,7 @@ public String toString() { @Override public void execute(StackFrame frame, ExecutionResult result) { - FieldRefInfo fieldRef = (FieldRefInfo)this.getConstantInfo(this.getIndex()); + FieldRefInfo fieldRef = (FieldRefInfo) this.getConstantInfo(this.getIndex()); String fieldName = fieldRef.getFieldName(); JavaObject jo = frame.getOprandStack().pop(); JavaObject fieldValue = jo.getFieldValue(fieldName); diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/GetStaticFieldCmd.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/GetStaticFieldCmd.java index 4144b0dae8..e3a2fb0c18 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/GetStaticFieldCmd.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/GetStaticFieldCmd.java @@ -8,6 +8,9 @@ import me.lzb.jvm.engine.StackFrame; import me.lzb.jvm.print.ExecutionVisitor; +/** + * @author LZB + */ public class GetStaticFieldCmd extends TwoOperandCmd { public GetStaticFieldCmd(ClassFile clzFile, String opCode) { diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/IncrementCmd.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/IncrementCmd.java new file mode 100644 index 0000000000..b76267fd18 --- /dev/null +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/IncrementCmd.java @@ -0,0 +1,46 @@ +package me.lzb.jvm.cmd; + +import me.lzb.jvm.clz.ClassFile; +import me.lzb.jvm.engine.ExecutionResult; +import me.lzb.jvm.engine.Heap; +import me.lzb.jvm.engine.JavaObject; +import me.lzb.jvm.engine.StackFrame; +import me.lzb.jvm.print.ExecutionVisitor; + +/** + * @author LZB + */ +public class IncrementCmd extends TwoOperandCmd { + + public IncrementCmd(ClassFile clzFile, String opCode) { + super(clzFile, opCode); + + } + + @Override + public String toString() { + + return this.getOffset() + ":" + this.getOpCode() + " " + this.getReadableCodeText(); + } + + @Override + public void execute(StackFrame frame, ExecutionResult result) { + + int index = this.getOprand1(); + + int constValue = this.getOprand2(); + + int currentValue = frame.getLocalVariableValue(index).getIntValue(); + + JavaObject jo = Heap.getInstance().newInt(constValue + currentValue); + + frame.setLocalVariableValue(index, jo); + + + } + + @Override + public void printExecute(ExecutionVisitor visitor) { + visitor.visitIncrementCmd(this); + } +} diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/InvokeSpecialCmd.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/InvokeSpecialCmd.java index de1b9d3493..e3e0ddc1fe 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/InvokeSpecialCmd.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/InvokeSpecialCmd.java @@ -8,7 +8,9 @@ import me.lzb.jvm.method.Method; import me.lzb.jvm.print.ExecutionVisitor; - +/** + * @author LZB + */ public class InvokeSpecialCmd extends TwoOperandCmd { public InvokeSpecialCmd(ClassFile clzFile, String opCode) { diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/InvokeVirtualCmd.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/InvokeVirtualCmd.java index caf195c206..051e9b513e 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/InvokeVirtualCmd.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/InvokeVirtualCmd.java @@ -9,6 +9,9 @@ import me.lzb.jvm.method.Method; import me.lzb.jvm.print.ExecutionVisitor; +/** + * @author LZB + */ public class InvokeVirtualCmd extends TwoOperandCmd { public InvokeVirtualCmd(ClassFile clzFile, String opCode) { @@ -40,7 +43,7 @@ public void execute(StackFrame frame, ExecutionResult result) { return; } - //注意:多态, 这才是真正的对象, 先从该对象的class 中去找对应的方法,找不到的话再去找父类的方法 + //多态, 这才是真正的对象, 先从该对象的class 中去找对应的方法,找不到的话再去找父类的方法 JavaObject jo = frame.getOprandStack().peek(); MethodArea ma = MethodArea.getInstance(); diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/LdcCmd.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/LdcCmd.java index 8a8278fcb7..a05814ce4a 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/LdcCmd.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/LdcCmd.java @@ -10,6 +10,9 @@ import me.lzb.jvm.engine.StackFrame; import me.lzb.jvm.print.ExecutionVisitor; +/** + * @author LZB + */ public class LdcCmd extends OneOperandCmd { public LdcCmd(ClassFile clzFile, String opCode) { diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/NewObjectCmd.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/NewObjectCmd.java index 4b6544b2ce..2fe1af00d8 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/NewObjectCmd.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/NewObjectCmd.java @@ -8,6 +8,9 @@ import me.lzb.jvm.engine.StackFrame; import me.lzb.jvm.print.ExecutionVisitor; +/** + * @author LZB + */ public class NewObjectCmd extends TwoOperandCmd { public NewObjectCmd(ClassFile clzFile, String opCode) { diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/NoOperandCmd.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/NoOperandCmd.java index 2657181e94..8c185bd3b9 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/NoOperandCmd.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/NoOperandCmd.java @@ -7,6 +7,9 @@ import me.lzb.jvm.engine.StackFrame; import me.lzb.jvm.print.ExecutionVisitor; +/** + * @author LZB + */ public class NoOperandCmd extends ByteCodeCommand { public NoOperandCmd(ClassFile clzFile, String opCode) { diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/OneOperandCmd.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/OneOperandCmd.java index de9391fb56..950137d7b9 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/OneOperandCmd.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/OneOperandCmd.java @@ -2,6 +2,9 @@ import me.lzb.jvm.clz.ClassFile; +/** + * @author LZB + */ public abstract class OneOperandCmd extends ByteCodeCommand { private int operand; diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/PutFieldCmd.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/PutFieldCmd.java index 6d6efcc7fe..b8325ea5ab 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/PutFieldCmd.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/PutFieldCmd.java @@ -9,7 +9,9 @@ import me.lzb.jvm.engine.StackFrame; import me.lzb.jvm.print.ExecutionVisitor; - +/** + * @author LZB + */ public class PutFieldCmd extends TwoOperandCmd { public PutFieldCmd(ClassFile clzFile, String opCode) { diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/TwoOperandCmd.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/TwoOperandCmd.java index b1c1ac7041..c6effe5988 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/TwoOperandCmd.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/cmd/TwoOperandCmd.java @@ -3,6 +3,9 @@ import me.lzb.jvm.clz.ClassFile; import me.lzb.jvm.constant.*; +/** + * @author LZB + */ public abstract class TwoOperandCmd extends ByteCodeCommand { int oprand1 = -1; @@ -59,4 +62,6 @@ public String getOperandAsField() { public int getLength() { return 3; } + + } diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/ClassInfo.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/ClassInfo.java index 16ea736db1..daebec4881 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/ClassInfo.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/ClassInfo.java @@ -3,9 +3,9 @@ import me.lzb.jvm.print.PrintVisitor; /** - * Created by LZB on 2017/4/14. + * @author LZB */ -public class ClassInfo extends ConstantInfo{ +public class ClassInfo extends ConstantInfo { private int type = ConstantInfo.Class_info; private int utf8Index; @@ -34,7 +34,7 @@ public void setUtf8Index(int utf8Index) { public String getClassName() { int index = getUtf8Index(); - UTF8Info utf8Info = (UTF8Info)constantPool.getConstantInfo(index); + UTF8Info utf8Info = (UTF8Info) constantPool.getConstantInfo(index); return utf8Info.getValue(); } } diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/ConstantInfo.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/ConstantInfo.java index e1952a7a3e..9295e4eaf2 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/ConstantInfo.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/ConstantInfo.java @@ -4,7 +4,7 @@ import me.lzb.jvm.print.PrintVisitor; /** - * Created by LZB on 2017/4/14. + * @author LZB */ public abstract class ConstantInfo implements Print { diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/ConstantPool.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/ConstantPool.java index d78f0a71f4..3855ab5f6f 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/ConstantPool.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/ConstantPool.java @@ -4,29 +4,28 @@ import java.util.List; /** - * Created by LZB on 2017/4/14. + * @author LZB */ public class ConstantPool { private List constantInfoList = new ArrayList<>(); - - public void addConstantInfo(ConstantInfo constantInfo){ + public void addConstantInfo(ConstantInfo constantInfo) { constantInfoList.add(constantInfo); } - public int getSize(){ + public int getSize() { return constantInfoList.size() > 1 ? constantInfoList.size() - 1 : 0; } - public ConstantInfo getConstantInfo(int index){ + public ConstantInfo getConstantInfo(int index) { return constantInfoList.get(index); } - public String getUTF8String(int index){ - return ((UTF8Info)this.constantInfoList.get(index)).getValue(); + public String getUTF8String(int index) { + return ((UTF8Info) this.constantInfoList.get(index)).getValue(); } } diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/FieldRefInfo.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/FieldRefInfo.java index 6ceebd96aa..59a40abaf3 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/FieldRefInfo.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/FieldRefInfo.java @@ -3,7 +3,7 @@ import me.lzb.jvm.print.PrintVisitor; /** - * Created by LZB on 2017/4/15. + * @author LZB */ public class FieldRefInfo extends ConstantInfo { private int type = ConstantInfo.Fieldref_info; diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/MethodRefInfo.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/MethodRefInfo.java index 0755af98ed..a3ee799cc7 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/MethodRefInfo.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/MethodRefInfo.java @@ -3,7 +3,7 @@ import me.lzb.jvm.print.PrintVisitor; /** - * Created by LZB on 2017/4/15. + * @author LZB */ public class MethodRefInfo extends ConstantInfo { private int type = ConstantInfo.Methodref_info; @@ -41,25 +41,25 @@ public void setNameAndTypeIndex(int nameAndTypeIndex) { this.nameAndTypeIndex = nameAndTypeIndex; } - public String getClassName(){ + public String getClassName() { ConstantPool pool = this.getConstantPool(); - ClassInfo clzInfo = (ClassInfo)pool.getConstantInfo(this.getClassInfoIndex()); + ClassInfo clzInfo = (ClassInfo) pool.getConstantInfo(this.getClassInfoIndex()); return clzInfo.getClassName(); } - public String getMethodName(){ + public String getMethodName() { ConstantPool pool = this.getConstantPool(); - NameAndTypeInfo typeInfo = (NameAndTypeInfo)pool.getConstantInfo(this.getNameAndTypeIndex()); + NameAndTypeInfo typeInfo = (NameAndTypeInfo) pool.getConstantInfo(this.getNameAndTypeIndex()); return typeInfo.getName(); } - public String getParamAndReturnType(){ + public String getParamAndReturnType() { ConstantPool pool = this.getConstantPool(); - NameAndTypeInfo typeInfo = (NameAndTypeInfo)pool.getConstantInfo(this.getNameAndTypeIndex()); + NameAndTypeInfo typeInfo = (NameAndTypeInfo) pool.getConstantInfo(this.getNameAndTypeIndex()); return typeInfo.getTypeInfo(); } - public String toString(){ - return this.getMethodName() + ":" + this.getParamAndReturnType() ; + public String toString() { + return this.getMethodName() + ":" + this.getParamAndReturnType(); } } diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/NameAndTypeInfo.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/NameAndTypeInfo.java index 7d14bf3bdc..52df87a19f 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/NameAndTypeInfo.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/NameAndTypeInfo.java @@ -3,7 +3,7 @@ import me.lzb.jvm.print.PrintVisitor; /** - * Created by LZB on 2017/4/15. + * @author LZB */ public class NameAndTypeInfo extends ConstantInfo { private int type = ConstantInfo.NameAndType_info; diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/NullConstantInfo.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/NullConstantInfo.java index 88b90ca6c1..24f13c4fb8 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/NullConstantInfo.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/NullConstantInfo.java @@ -3,9 +3,9 @@ import me.lzb.jvm.print.PrintVisitor; /** - * Created by LZB on 2017/4/14. + * @author LZB */ -public class NullConstantInfo extends ConstantInfo{ +public class NullConstantInfo extends ConstantInfo { @Override public int getType() { diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/StringInfo.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/StringInfo.java index 0af04e46bb..1b1ec316ee 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/StringInfo.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/StringInfo.java @@ -3,7 +3,7 @@ import me.lzb.jvm.print.PrintVisitor; /** - * Created by LZB on 2017/4/15. + * @author LZB */ public class StringInfo extends ConstantInfo { private int type = ConstantInfo.String_info; @@ -13,6 +13,7 @@ public class StringInfo extends ConstantInfo { public StringInfo(ConstantPool pool) { super(pool); } + @Override public int getType() { return type; @@ -31,7 +32,7 @@ public void setIndex(int index) { this.index = index; } - public String toString(){ + public String toString() { return getConstantPool().getUTF8String(index); } diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/UTF8Info.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/UTF8Info.java index 9a27b3c716..78c66929e1 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/UTF8Info.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/constant/UTF8Info.java @@ -3,7 +3,7 @@ import me.lzb.jvm.print.PrintVisitor; /** - * Created by LZB on 2017/4/15. + * @author LZB */ public class UTF8Info extends ConstantInfo { private int type = ConstantInfo.Class_info; diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/engine/ExecutionResult.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/engine/ExecutionResult.java index 9afe234cfa..983c8006ff 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/engine/ExecutionResult.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/engine/ExecutionResult.java @@ -3,6 +3,9 @@ import me.lzb.jvm.method.Method; +/** + * @author LZB + */ public class ExecutionResult { public static final int RUN_NEXT_CMD = 1; public static final int JUMP = 2; diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/engine/ExecutorEngine.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/engine/ExecutorEngine.java index ff1840ab38..1ccd6b90b9 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/engine/ExecutorEngine.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/engine/ExecutorEngine.java @@ -7,7 +7,9 @@ import java.util.List; import java.util.Stack; - +/** + * @author LZB + */ public class ExecutorEngine { private Stack stack = new Stack<>(); diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/engine/Heap.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/engine/Heap.java index 6d53f86871..b8cc8b7ffb 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/engine/Heap.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/engine/Heap.java @@ -1,11 +1,12 @@ package me.lzb.jvm.engine; +/** + * 没有实现垃圾回收, 所以对于下面新创建的对象, 并没有记录到一个数据结构当中 + * + * @author LZB + */ public class Heap { - /** - * 没有实现垃圾回收, 所以对于下面新创建的对象, 并没有记录到一个数据结构当中 - */ - private static Heap instance = new Heap(); private Heap() { diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/engine/JavaObject.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/engine/JavaObject.java index 186d8be67d..61b2285953 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/engine/JavaObject.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/engine/JavaObject.java @@ -3,6 +3,9 @@ import java.util.HashMap; import java.util.Map; +/** + * @author LZB + */ public class JavaObject { public static final int OBJECT = 1; public static final int STRING = 2; diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/engine/MethodArea.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/engine/MethodArea.java index ffc3c641fc..562809de3c 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/engine/MethodArea.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/engine/MethodArea.java @@ -9,6 +9,9 @@ import java.util.HashMap; import java.util.Map; +/** + * @author LZB + */ public class MethodArea { public static final MethodArea instance = new MethodArea(); diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/engine/MiniJVM.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/engine/MiniJVM.java index fac0c1bb34..2e76d70d66 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/engine/MiniJVM.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/engine/MiniJVM.java @@ -4,7 +4,9 @@ import java.io.IOException; - +/** + * @author LZB + */ public class MiniJVM { public void run(String[] classPaths, String className) throws IOException { diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/engine/StackFrame.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/engine/StackFrame.java index ed641cd931..8b266c5981 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/engine/StackFrame.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/engine/StackFrame.java @@ -9,7 +9,9 @@ import java.util.List; import java.util.Stack; - +/** + * @author LZB + */ public class StackFrame { private List localVariableTable = new ArrayList<>(); diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/field/Field.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/field/Field.java index f388fd01bf..23896d936b 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/field/Field.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/field/Field.java @@ -1,9 +1,10 @@ package me.lzb.jvm.field; +import me.lzb.jvm.attr.ConstantValue; import me.lzb.jvm.constant.ConstantPool; /** - * Created by LZB on 2017/4/15. + * @author LZB */ public class Field { private int accessFlag; @@ -12,7 +13,9 @@ public class Field { private ConstantPool pool; - public Field(int accessFlag, int nameIndex, int descriptorIndex ,ConstantPool pool) { + private ConstantValue constantValue; + + public Field(int accessFlag, int nameIndex, int descriptorIndex, ConstantPool pool) { this.accessFlag = accessFlag; this.nameIndex = nameIndex; @@ -27,4 +30,12 @@ public String toString() { String value = pool.getUTF8String(descriptorIndex); return key + ":" + value; } + + public ConstantValue getConstantValue() { + return constantValue; + } + + public void setConstantValue(ConstantValue constantValue) { + this.constantValue = constantValue; + } } diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/loader/ClassFileLoader.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/loader/ClassFileLoader.java index d8912cb1bb..9d853530c9 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/loader/ClassFileLoader.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/loader/ClassFileLoader.java @@ -10,7 +10,9 @@ import java.util.Iterator; import java.util.List; - +/** + * @author LZB + */ public class ClassFileLoader { private List clzPaths = new ArrayList<>(); diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/loader/ClassFileParser.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/loader/ClassFileParser.java index e265907158..a7396bb7d4 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/loader/ClassFileParser.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/loader/ClassFileParser.java @@ -14,7 +14,8 @@ /** * 处理字class文件字节流 - * Created by LZB on 2017/4/14. + * + * @author LZB */ public class ClassFileParser { @@ -185,17 +186,29 @@ private void parserInterface(ClassFile classFile) { private void parserField(ClassFile classFile) { int count = nextBytesToInt(2); for (int i = 1; i <= count; i++) { + int accessFlags = nextBytesToInt(2); int nameIndex = nextBytesToInt(2); int descriptorIndex = nextBytesToInt(2); int attributesCount = nextBytesToInt(2); - if (attributesCount > 0) { - throw new RuntimeException("Field Attribute has not been implement"); + Field f = new Field(accessFlags, nameIndex, descriptorIndex, classFile.getConstantPool()); + + for (int j = 1; j <= attributesCount; j++) { + int attrNameIndex = nextBytesToInt(2); + String attrName = classFile.getConstantPool().getUTF8String(attrNameIndex); + + if (AttributeInfo.CONST_VALUE.equals(attrName)) { + int attrLen = nextBytesToInt(4); + ConstantValue constValue = new ConstantValue(attrNameIndex, attrLen); + constValue.setConstValueIndex(nextBytesToInt(2)); + f.setConstantValue(constValue); + } else { + throw new RuntimeException("the attribute " + attrName + " has not been implemented yet."); + } } - Field field = new Field(accessFlags, nameIndex, descriptorIndex, classFile.getConstantPool()); - classFile.addField(field); + classFile.addField(f); } } diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/loader/CommandParser.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/loader/CommandParser.java index 285ff441c7..3e7976a484 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/loader/CommandParser.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/loader/CommandParser.java @@ -8,7 +8,7 @@ import java.util.List; /** - * Created by LZB on 2017/4/22. + * @author LZB */ public class CommandParser { @@ -104,6 +104,19 @@ public ByteCodeCommand[] parse(ClassFile clzFile) { BiPushCmd cmd = new BiPushCmd(clzFile, opCode); cmd.setOperand(next2CharAsInt()); cmds.add(cmd); + } else if (ByteCodeCommand.if_icmpge.equals(opCode) + || ByteCodeCommand.if_icmpgt.equals(opCode) + || ByteCodeCommand.if_icmple.equals(opCode) + || ByteCodeCommand.goto_no_condition.equals(opCode)) { + ComparisonCmd cmd = new ComparisonCmd(clzFile, opCode); + cmd.setOprand1(next2CharAsInt()); + cmd.setOprand2(next2CharAsInt()); + cmds.add(cmd); + } else if (ByteCodeCommand.iinc.equals(opCode)) { + IncrementCmd cmd = new IncrementCmd(clzFile, opCode); + cmd.setOprand1(next2CharAsInt()); + cmd.setOprand2(next2CharAsInt()); + cmds.add(cmd); } else if (ByteCodeCommand.dup.equals(opCode) || ByteCodeCommand.aload_0.equals(opCode) || ByteCodeCommand.aload_1.equals(opCode) @@ -112,8 +125,14 @@ public ByteCodeCommand[] parse(ClassFile clzFile) { || ByteCodeCommand.iload_2.equals(opCode) || ByteCodeCommand.iload_3.equals(opCode) || ByteCodeCommand.fload_3.equals(opCode) + || ByteCodeCommand.iconst_0.equals(opCode) + || ByteCodeCommand.iconst_1.equals(opCode) + || ByteCodeCommand.istore_1.equals(opCode) + || ByteCodeCommand.istore_2.equals(opCode) || ByteCodeCommand.voidreturn.equals(opCode) - || ByteCodeCommand.astore_1.equals(opCode)) { + || ByteCodeCommand.iadd.equals(opCode) + || ByteCodeCommand.astore_1.equals(opCode) + || ByteCodeCommand.ireturn.equals(opCode)) { NoOperandCmd cmd = new NoOperandCmd(clzFile, opCode); cmds.add(cmd); diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/method/Method.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/method/Method.java index 43acd00549..5cb174fecd 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/method/Method.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/method/Method.java @@ -10,7 +10,7 @@ import java.util.List; /** - * Created by LZB on 2017/4/15. + * @author LZB */ public class Method { private int accessFlag; diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/print/ClassPrinter.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/print/ClassPrinter.java index f5b008a41b..b65ffb7795 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/print/ClassPrinter.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/print/ClassPrinter.java @@ -6,7 +6,7 @@ import me.lzb.jvm.constant.ConstantPool; /** - * Created by LZB on 2017/4/23. + * @author LZB */ public class ClassPrinter { diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/print/ExecutionFormat.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/print/ExecutionFormat.java index 2bcd612840..f1cce96f77 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/print/ExecutionFormat.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/print/ExecutionFormat.java @@ -5,7 +5,7 @@ import me.lzb.jvm.constant.*; /** - * Created by LZB on 2017/5/1. + * @author LZB */ public class ExecutionFormat implements ExecutionVisitor { @@ -22,7 +22,7 @@ public static ExecutionFormat getInstance() { return format; } - private ExecutionFormat(){ + private ExecutionFormat() { } @@ -84,6 +84,21 @@ public void visitPutFieldCmd(PutFieldCmd cmd) { } + @Override + public void visitComparisonCmd(ComparisonCmd cmd) { + //TODO 执行输出格式 + String codeTxt = cmd.getReadableCodeText(); + System.out.println(getOffset(cmd.getOffset()) + ":" + cmd.getOpCode() + " " + StringUtils.appendSpace(one, codeTxt) + cmd.getGoOffset()); + } + + @Override + public void visitIncrementCmd(IncrementCmd cmd) { + //TODO 执行输出格式 + String codeTxt = cmd.getReadableCodeText(); + System.out.println(getOffset(cmd.getOffset()) + ":" + cmd.getOpCode() + " " + StringUtils.appendSpace(one, codeTxt)); + } + + private void exFile(TwoOperandCmd cmd) { int index = cmd.getIndex(); String codeTxt = cmd.getReadableCodeText(); diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/print/ExecutionVisitor.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/print/ExecutionVisitor.java index 427894a6ed..565f5e8713 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/print/ExecutionVisitor.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/print/ExecutionVisitor.java @@ -3,7 +3,7 @@ import me.lzb.jvm.cmd.*; /** - * Created by LZB on 2017/5/1. + * @author LZB */ public interface ExecutionVisitor { @@ -25,5 +25,7 @@ public interface ExecutionVisitor { void visitPutFieldCmd(PutFieldCmd cmd); + void visitComparisonCmd(ComparisonCmd cmd); + void visitIncrementCmd(IncrementCmd cmd); } diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/print/Print.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/print/Print.java index 1435d46814..03baccb81e 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/print/Print.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/print/Print.java @@ -1,10 +1,10 @@ package me.lzb.jvm.print; /** - * Created by LZB on 2017/4/23. + * @author LZB */ public interface Print { - public void print(PrintVisitor visitor); + void print(PrintVisitor visitor); } diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/print/PrintFormat.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/print/PrintFormat.java index bf62883c21..059a19cc09 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/print/PrintFormat.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/print/PrintFormat.java @@ -5,7 +5,7 @@ import me.lzb.jvm.constant.*; /** - * Created by LZB on 2017/4/23. + * @author LZB */ public class PrintFormat implements PrintVisitor { @@ -59,5 +59,4 @@ public void visitString(StringInfo info) { } - } diff --git a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/print/PrintVisitor.java b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/print/PrintVisitor.java index 350d424cd1..aac81ecd8a 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/print/PrintVisitor.java +++ b/group24/1148285693/learning2017/mini-jvm/src/main/java/me/lzb/jvm/print/PrintVisitor.java @@ -4,7 +4,7 @@ import me.lzb.jvm.constant.*; /** - * Created by LZB on 2017/4/23. + * @author LZB */ public interface PrintVisitor { void visitBasicMsg(ClassFile info); diff --git a/group24/1148285693/learning2017/mini-jvm/src/test/java/me/lzb/jvm/ClassFileloaderTest.java b/group24/1148285693/learning2017/mini-jvm/src/test/java/me/lzb/jvm/ClassFileloaderTest.java index a9f20b23c1..26255a8daa 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/test/java/me/lzb/jvm/ClassFileloaderTest.java +++ b/group24/1148285693/learning2017/mini-jvm/src/test/java/me/lzb/jvm/ClassFileloaderTest.java @@ -19,7 +19,9 @@ import java.util.List; - +/** + * @author LZB + */ public class ClassFileloaderTest { diff --git a/group24/1148285693/learning2017/mini-jvm/src/test/java/me/lzb/jvm/EmployeeV1.java b/group24/1148285693/learning2017/mini-jvm/src/test/java/me/lzb/jvm/EmployeeV1.java index 3fa9b0fc85..c4f8fd4d41 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/test/java/me/lzb/jvm/EmployeeV1.java +++ b/group24/1148285693/learning2017/mini-jvm/src/test/java/me/lzb/jvm/EmployeeV1.java @@ -1,8 +1,11 @@ package me.lzb.jvm; +/** + * @author LZB + */ public class EmployeeV1 { - private String name; + private String name; private int age; public EmployeeV1(String name, int age) { @@ -13,15 +16,18 @@ public EmployeeV1(String name, int age) { public void setName(String name) { this.name = name; } - public void setAge(int age){ - this.age = age; + + public void setAge(int age) { + this.age = age; } + public void sayHello() { - System.out.println("Hello , this is class Employee "); + System.out.println("Hello , this is class Employee "); } - public static void main(String[] args){ - EmployeeV1 p = new EmployeeV1("Andy",29); - p.sayHello(); + + public static void main(String[] args) { + EmployeeV1 p = new EmployeeV1("Andy", 29); + p.sayHello(); } } \ No newline at end of file diff --git a/group24/1148285693/learning2017/mini-jvm/src/test/java/me/lzb/jvm/EmployeeV2.java b/group24/1148285693/learning2017/mini-jvm/src/test/java/me/lzb/jvm/EmployeeV2.java new file mode 100644 index 0000000000..c71c700932 --- /dev/null +++ b/group24/1148285693/learning2017/mini-jvm/src/test/java/me/lzb/jvm/EmployeeV2.java @@ -0,0 +1,55 @@ +package me.lzb.jvm; + +/** + * @author LZB + */ +public class EmployeeV2 { + public static final String TEAM_NAME = "Dev Team"; + private String name; + private int age; + + public EmployeeV2(String name, int age) { + this.name = name; + this.age = age; + } + + public void sayHello() { + System.out.println("Hello , this is class Employee "); + System.out.println("Dev Team"); + System.out.println(this.name); + } + + public void setName(String name) { + this.name = name; + } + + public void setAge(int age) { + this.age = age; + } + + public void isYouth() { + if (this.age < 40) { + System.out.println("You're still young"); + } else { + System.out.println("You're old"); + } + + } + + public void testAdd() { + int sum = 0; + + for (int i = 1; i <= 10; ++i) { + sum += i; + } + + System.out.println(sum); + } + + public static void main(String[] args) { + EmployeeV2 p = new EmployeeV2("Andy", 35); + p.sayHello(); + p.isYouth(); + p.testAdd(); + } +} diff --git a/group24/1148285693/learning2017/mini-jvm/src/test/java/me/lzb/jvm/HourlyEmployee.java b/group24/1148285693/learning2017/mini-jvm/src/test/java/me/lzb/jvm/HourlyEmployee.java new file mode 100644 index 0000000000..37d7e8a756 --- /dev/null +++ b/group24/1148285693/learning2017/mini-jvm/src/test/java/me/lzb/jvm/HourlyEmployee.java @@ -0,0 +1,26 @@ +package me.lzb.jvm; + +/** + * @author LZB + */ +public class HourlyEmployee extends EmployeeV2 { + int hourlySalary; + + public HourlyEmployee(String name, int age, int hourlySalary) { + super(name, age); + this.hourlySalary = hourlySalary; + } + + public void sayHello() { + System.out.println("Hello , this is Hourly Employee"); + } + + public static void main(String[] args) { + EmployeeV2 e = new HourlyEmployee("Lisa", 20, 40); + e.sayHello(); + } + + public int getHourlySalary() { + return this.hourlySalary; + } +} diff --git a/group24/1148285693/learning2017/mini-jvm/src/test/java/me/lzb/jvm/MiniJVMTest.java b/group24/1148285693/learning2017/mini-jvm/src/test/java/me/lzb/jvm/MiniJVMTest.java index 0be0dea7c4..17c23d0391 100644 --- a/group24/1148285693/learning2017/mini-jvm/src/test/java/me/lzb/jvm/MiniJVMTest.java +++ b/group24/1148285693/learning2017/mini-jvm/src/test/java/me/lzb/jvm/MiniJVMTest.java @@ -5,24 +5,43 @@ import org.junit.Before; import org.junit.Test; - +/** + * @author LZB + */ public class MiniJVMTest { static String PATH = EmployeeV1.class.getResource("/").getPath(); - @Before - public void setUp() throws Exception { - } - @After - public void tearDown() throws Exception { - } + @Before + public void setUp() throws Exception { + } + + @After + public void tearDown() throws Exception { + } + + @Test + public void testMain() throws Exception { + String[] classPaths = {PATH}; + MiniJVM jvm = new MiniJVM(); + jvm.run(classPaths, "me.lzb.jvm.EmployeeV1"); + + } + + @Test + public void testMainV2() throws Exception { + String[] classPaths = {PATH}; + MiniJVM jvm = new MiniJVM(); + jvm.run(classPaths, "me.lzb.jvm.EmployeeV2"); + + } - @Test - public void testMain() throws Exception{ - String[] classPaths = {PATH}; - MiniJVM jvm = new MiniJVM(); - jvm.run(classPaths, "me.lzb.jvm.EmployeeV1"); + @Test + public void testMainHE() throws Exception { + String[] classPaths = {PATH}; + MiniJVM jvm = new MiniJVM(); + jvm.run(classPaths, "me.lzb.jvm.HourlyEmployee"); - } + } } diff --git a/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/ArrayList.java b/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/array/ArrayList.java similarity index 98% rename from group24/315863321/src/main/java/com/johnChnia/coding2017/basic/ArrayList.java rename to group24/315863321/src/main/java/com/johnChnia/coding2017/basic/array/ArrayList.java index 1d48b259f8..02376c76cc 100644 --- a/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/ArrayList.java +++ b/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/array/ArrayList.java @@ -1,4 +1,6 @@ -package com.johnChnia.coding2017.basic; +package com.johnChnia.coding2017.basic.array; + +import com.johnChnia.coding2017.basic.List; import java.util.Arrays; import java.util.Iterator; diff --git a/group24/315863321/src/main/java/com/johnChnia/coderising2017/array/ArrayUtil.java b/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/array/ArrayUtil.java similarity index 98% rename from group24/315863321/src/main/java/com/johnChnia/coderising2017/array/ArrayUtil.java rename to group24/315863321/src/main/java/com/johnChnia/coding2017/basic/array/ArrayUtil.java index 53a0305753..25e18ad875 100644 --- a/group24/315863321/src/main/java/com/johnChnia/coderising2017/array/ArrayUtil.java +++ b/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/array/ArrayUtil.java @@ -1,7 +1,6 @@ -package com.johnChnia.coderising2017.array; +package com.johnChnia.coding2017.basic.array; import com.johnChnia.coding2017.basic.queue.Queue; -import com.johnChnia.coding2017.basic.ArrayList; public class ArrayUtil { diff --git a/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/queue/Josephus.java b/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/queue/Josephus.java index 942b11cf68..6e06ee9d8f 100644 --- a/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/queue/Josephus.java +++ b/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/queue/Josephus.java @@ -1,7 +1,7 @@ package com.johnChnia.coding2017.basic.queue; -import com.johnChnia.coding2017.basic.ArrayList; +import com.johnChnia.coding2017.basic.array.ArrayList; import com.johnChnia.coding2017.basic.List; /** diff --git a/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/queue/Queue.java b/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/queue/Queue.java index 4d82ad0c92..ab9381e4c8 100644 --- a/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/queue/Queue.java +++ b/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/queue/Queue.java @@ -1,6 +1,6 @@ package com.johnChnia.coding2017.basic.queue; -import com.johnChnia.coding2017.basic.ArrayList; +import com.johnChnia.coding2017.basic.array.ArrayList; import java.util.NoSuchElementException; @@ -54,9 +54,9 @@ public E remove() { * * @return the head of this queue, or {@code 0} if this queue is empty */ - public Object peek() { + public E peek() { if (arrayList.empty()) - return 0; + return null; return arrayList.get(0); } diff --git a/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/stack/expr/InfixToPostfix.java b/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/stack/expr/InfixToPostfix.java index 1efa28721f..be6c04a036 100644 --- a/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/stack/expr/InfixToPostfix.java +++ b/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/stack/expr/InfixToPostfix.java @@ -1,7 +1,7 @@ package com.johnChnia.coding2017.basic.stack.expr; -import com.johnChnia.coding2017.basic.ArrayList; +import com.johnChnia.coding2017.basic.array.ArrayList; import com.johnChnia.coding2017.basic.List; import com.johnChnia.coding2017.basic.stack.Stack; diff --git a/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/stack/expr/TokenParser.java b/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/stack/expr/TokenParser.java index e66e4ff8c0..5072f9c281 100644 --- a/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/stack/expr/TokenParser.java +++ b/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/stack/expr/TokenParser.java @@ -1,7 +1,7 @@ package com.johnChnia.coding2017.basic.stack.expr; -import com.johnChnia.coding2017.basic.ArrayList; +import com.johnChnia.coding2017.basic.array.ArrayList; import com.johnChnia.coding2017.basic.List; public class TokenParser { diff --git a/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/BinarySearchTree.java b/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/tree/BinarySearchTree.java similarity index 98% rename from group24/315863321/src/main/java/com/johnChnia/coding2017/basic/BinarySearchTree.java rename to group24/315863321/src/main/java/com/johnChnia/coding2017/basic/tree/BinarySearchTree.java index a574b04794..a362c78734 100644 --- a/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/BinarySearchTree.java +++ b/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/tree/BinarySearchTree.java @@ -1,4 +1,4 @@ -package com.johnChnia.coding2017.basic; +package com.johnChnia.coding2017.basic.tree; import com.johnChnia.coding2017.basic.queue.Queue; diff --git a/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/tree/BinaryTreeNode.java b/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/tree/BinaryTreeNode.java new file mode 100644 index 0000000000..f276c16631 --- /dev/null +++ b/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/tree/BinaryTreeNode.java @@ -0,0 +1,44 @@ +package com.johnChnia.coding2017.basic.tree; + +/** + * Created by john on 2017/5/18. + */ +public class BinaryTreeNode { + + public T data; + public BinaryTreeNode left; + public BinaryTreeNode right; + + public BinaryTreeNode(T data) { + this.data = data; + } + + public T getData() { + return data; + } + + public void setData(T data) { + this.data = data; + } + + public BinaryTreeNode getLeft() { + return left; + } + + public void setLeft(BinaryTreeNode left) { + this.left = left; + } + + public BinaryTreeNode getRight() { + return right; + } + + public void setRight(BinaryTreeNode right) { + this.right = right; + } + + public BinaryTreeNode insert(Object o) { + return null; + } + +} diff --git a/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/tree/BinaryTreeUtil.java b/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/tree/BinaryTreeUtil.java new file mode 100644 index 0000000000..0a5ba11e2e --- /dev/null +++ b/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/tree/BinaryTreeUtil.java @@ -0,0 +1,145 @@ +package com.johnChnia.coding2017.basic.tree; + + +import com.johnChnia.coding2017.basic.stack.Stack; + +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +/** + * Created by john on 2017/5/18. + * 前序遍历:. + * 中序遍历: . + * 后序遍历: . + */ +public class BinaryTreeUtil { + /** + * 用递归的方式实现对二叉树的前序遍历, 需要通过BinaryTreeUtilTest测试 + * + * @param root + * @return + */ + public static List preOrderVisit(BinaryTreeNode root) { + if (root == null) { + return null; + } + List result = new ArrayList<>(); + result.add(root.data); + List temp1 = preOrderVisit(root.left); + if (temp1 != null) { + result.addAll(temp1); + } + List temp2 = preOrderVisit(root.right); + if (temp2 != null) { + result.addAll(temp2); + } + return result; + } + + /** + * 用递归的方式实现对二叉树的中遍历 + * + * @param root + * @return + */ + public static List inOrderVisit(BinaryTreeNode root) { + if (root == null) { + return null; + } + List result = new ArrayList<>(); + List temp1 = inOrderVisit(root.left); + if (temp1 != null) { + result.addAll(temp1); + } + result.add(root.data); + List temp2 = inOrderVisit(root.right); + if (temp2 != null) { + result.addAll(temp2); + } + return result; + } + + /** + * 用递归的方式实现对二叉树的后遍历 + * + * @param root + * @return + */ + public static List postOrderVisit(BinaryTreeNode root) { + if (root == null) { + return null; + } + List result = new ArrayList<>(); + + List temp1 = postOrderVisit(root.left); + if (temp1 != null) { + result.addAll(temp1); + } + List temp2 = postOrderVisit(root.right); + if (temp2 != null) { + result.addAll(temp2); + } + result.add(root.data); + return result; + } + + /** + * 用非递归的方式实现对二叉树的前序遍历 + * + * @param root + * @return + */ + public static List preOrderWithoutRecursion(BinaryTreeNode root) { + if (Objects.isNull(root)) { + return null; + } + Stack> stack = new Stack<>(); + List result = new ArrayList<>(); + stack.push(root); + while (!stack.empty()) { + BinaryTreeNode top = stack.pop(); + if (Objects.nonNull(top.getRight())) { + stack.push(top.getRight()); + } + if (Objects.nonNull(top.getLeft())) { + stack.push(top.getLeft()); + } + result.add(top.data); + } + return result; + } + + /** + * 用非递归的方式实现对二叉树的中序遍历 + * 参考:http://www.geeksforgeeks.org/inorder-tree-traversal-without-recursion/ + * + * @param root + * @return + */ + public static List inOrderWithoutRecursion(BinaryTreeNode root) { + if (Objects.isNull(root)) { + return null; + } + Stack> stack = new Stack<>(); + List result = new ArrayList<>(); + BinaryTreeNode node = root; + while (Objects.nonNull(node)) { + stack.push(node); + node = node.getLeft(); + } + while (!stack.empty()) { + node = stack.pop(); + result.add(node.data); + if (Objects.nonNull(node.getRight())) { + node = node.right; + while (Objects.nonNull(node)) { + stack.push(node); + node = node.getLeft(); + } + } + } + return result; + } + +} \ No newline at end of file diff --git a/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/tree/FileList.java b/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/tree/FileList.java new file mode 100644 index 0000000000..470a80224a --- /dev/null +++ b/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/tree/FileList.java @@ -0,0 +1,53 @@ +package com.johnChnia.coding2017.basic.tree; + +import java.io.File; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Objects; + +/** + * Created by john on 2017/5/18. + */ +public class FileList { + + public TreeInfo list(File f) { + if (Objects.isNull(f)) { + return null; + } + TreeInfo treeInfo = new TreeInfo(); + if (f.isDirectory()) { + treeInfo.dirs.add(f); + for (File lf : + f.listFiles()) { + treeInfo.addAll(list(lf)); + } + } else { + if (!f.getName().matches(".*\\.DS_Store")) + treeInfo.files.add(f); + } + return treeInfo; + } + + public static class TreeInfo implements Iterable { + public List files = new ArrayList<>(); + public List dirs = new ArrayList<>(); + + @Override + public Iterator iterator() { + return files.iterator(); + } + + public void addAll(TreeInfo other) { + files.addAll(other.files); + dirs.addAll(other.dirs); + } + + @Override + public String toString() { + return "dirs: " + dirs + + "\n\nfiles: " + files; + } + } + +} diff --git a/group24/315863321/src/test/java/com/johnChnia/coding2017/basic/ArrayListTest.java b/group24/315863321/src/test/java/com/johnChnia/coding2017/basic/array/ArrayListTest.java similarity index 94% rename from group24/315863321/src/test/java/com/johnChnia/coding2017/basic/ArrayListTest.java rename to group24/315863321/src/test/java/com/johnChnia/coding2017/basic/array/ArrayListTest.java index 5109ea69ad..b2aeafdd44 100644 --- a/group24/315863321/src/test/java/com/johnChnia/coding2017/basic/ArrayListTest.java +++ b/group24/315863321/src/test/java/com/johnChnia/coding2017/basic/array/ArrayListTest.java @@ -1,5 +1,6 @@ -package com.johnChnia.coding2017.basic; +package com.johnChnia.coding2017.basic.array; +import com.johnChnia.coding2017.basic.array.ArrayList; import org.junit.Before; import org.junit.Test; diff --git a/group24/315863321/src/test/java/com/johnChnia/coderising2017/array/ArrayUtilTest.java b/group24/315863321/src/test/java/com/johnChnia/coding2017/basic/array/ArrayUtilTest.java similarity index 98% rename from group24/315863321/src/test/java/com/johnChnia/coderising2017/array/ArrayUtilTest.java rename to group24/315863321/src/test/java/com/johnChnia/coding2017/basic/array/ArrayUtilTest.java index 9b730c19e5..76bb8340e0 100644 --- a/group24/315863321/src/test/java/com/johnChnia/coderising2017/array/ArrayUtilTest.java +++ b/group24/315863321/src/test/java/com/johnChnia/coding2017/basic/array/ArrayUtilTest.java @@ -1,4 +1,4 @@ -package com.johnChnia.coderising2017.array; +package com.johnChnia.coding2017.basic.array; import org.junit.Before; import org.junit.Test; diff --git a/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/linklist/LRUPageFrameTest.java b/group24/315863321/src/test/java/com/johnChnia/coding2017/basic/linklist/LRUPageFrameTest.java similarity index 100% rename from group24/315863321/src/main/java/com/johnChnia/coding2017/basic/linklist/LRUPageFrameTest.java rename to group24/315863321/src/test/java/com/johnChnia/coding2017/basic/linklist/LRUPageFrameTest.java diff --git a/group24/315863321/src/test/java/com/johnChnia/coding2017/basic/LinkedListTest.java b/group24/315863321/src/test/java/com/johnChnia/coding2017/basic/linklist/LinkedListTest.java similarity index 99% rename from group24/315863321/src/test/java/com/johnChnia/coding2017/basic/LinkedListTest.java rename to group24/315863321/src/test/java/com/johnChnia/coding2017/basic/linklist/LinkedListTest.java index 941d524987..4f65a8fce7 100644 --- a/group24/315863321/src/test/java/com/johnChnia/coding2017/basic/LinkedListTest.java +++ b/group24/315863321/src/test/java/com/johnChnia/coding2017/basic/linklist/LinkedListTest.java @@ -1,4 +1,4 @@ -package com.johnChnia.coding2017.basic; +package com.johnChnia.coding2017.basic.linklist; import org.junit.Before; import org.junit.Test; diff --git a/group24/315863321/src/main/java/com/johnChnia/coding2017/basic/queue/JosephusTest.java b/group24/315863321/src/test/java/com/johnChnia/coding2017/basic/queue/JosephusTest.java similarity index 100% rename from group24/315863321/src/main/java/com/johnChnia/coding2017/basic/queue/JosephusTest.java rename to group24/315863321/src/test/java/com/johnChnia/coding2017/basic/queue/JosephusTest.java diff --git a/group24/315863321/src/test/java/com/johnChnia/coding2017/basic/QueueTest.java b/group24/315863321/src/test/java/com/johnChnia/coding2017/basic/queue/QueueTest.java similarity index 96% rename from group24/315863321/src/test/java/com/johnChnia/coding2017/basic/QueueTest.java rename to group24/315863321/src/test/java/com/johnChnia/coding2017/basic/queue/QueueTest.java index 22f17c4327..9fdc7930d5 100644 --- a/group24/315863321/src/test/java/com/johnChnia/coding2017/basic/QueueTest.java +++ b/group24/315863321/src/test/java/com/johnChnia/coding2017/basic/queue/QueueTest.java @@ -1,4 +1,4 @@ -package com.johnChnia.coding2017.basic; +package com.johnChnia.coding2017.basic.queue; import com.johnChnia.coding2017.basic.queue.Queue; import org.junit.Before; diff --git a/group24/315863321/src/test/java/com/johnChnia/coding2017/basic/StackTest.java b/group24/315863321/src/test/java/com/johnChnia/coding2017/basic/stack/StackTest.java similarity index 97% rename from group24/315863321/src/test/java/com/johnChnia/coding2017/basic/StackTest.java rename to group24/315863321/src/test/java/com/johnChnia/coding2017/basic/stack/StackTest.java index c6f4ec1b2c..c55ee9944b 100644 --- a/group24/315863321/src/test/java/com/johnChnia/coding2017/basic/StackTest.java +++ b/group24/315863321/src/test/java/com/johnChnia/coding2017/basic/stack/StackTest.java @@ -1,4 +1,4 @@ -package com.johnChnia.coding2017.basic; +package com.johnChnia.coding2017.basic.stack; import com.johnChnia.coding2017.basic.stack.Stack; import org.junit.Before; diff --git a/group24/315863321/src/test/java/com/johnChnia/coding2017/basic/BinarySearchTreeTest.java b/group24/315863321/src/test/java/com/johnChnia/coding2017/basic/tree/BinarySearchTreeTest.java similarity index 88% rename from group24/315863321/src/test/java/com/johnChnia/coding2017/basic/BinarySearchTreeTest.java rename to group24/315863321/src/test/java/com/johnChnia/coding2017/basic/tree/BinarySearchTreeTest.java index d756c31198..968d386717 100644 --- a/group24/315863321/src/test/java/com/johnChnia/coding2017/basic/BinarySearchTreeTest.java +++ b/group24/315863321/src/test/java/com/johnChnia/coding2017/basic/tree/BinarySearchTreeTest.java @@ -1,5 +1,6 @@ -package com.johnChnia.coding2017.basic; +package com.johnChnia.coding2017.basic.tree; +import com.johnChnia.coding2017.basic.tree.BinarySearchTree; import org.junit.Before; import org.junit.Test; diff --git a/group24/315863321/src/test/java/com/johnChnia/coding2017/basic/tree/BinaryTreeUtilTest.java b/group24/315863321/src/test/java/com/johnChnia/coding2017/basic/tree/BinaryTreeUtilTest.java new file mode 100644 index 0000000000..0d636a85a9 --- /dev/null +++ b/group24/315863321/src/test/java/com/johnChnia/coding2017/basic/tree/BinaryTreeUtilTest.java @@ -0,0 +1,79 @@ +package com.johnChnia.coding2017.basic.tree; + +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import java.util.List; + +/** + * Created by john on 2017/5/18. + */ +public class BinaryTreeUtilTest { + + BinaryTreeNode root = null; + + @Before + public void setUp() throws Exception { + root = new BinaryTreeNode(1); + root.setLeft(new BinaryTreeNode(2)); + root.setRight(new BinaryTreeNode(5)); + root.getLeft().setLeft(new BinaryTreeNode(3)); + root.getLeft().setRight(new BinaryTreeNode(4)); + } + + @After + public void tearDown() throws Exception { + } + + @Test + public void testPreOrderVisit() { + + List result = BinaryTreeUtil.preOrderVisit(root); + Assert.assertEquals("[1, 2, 3, 4, 5]", result.toString()); + + + } + + @Test + public void testInOrderVisit() { + + + List result = BinaryTreeUtil.inOrderVisit(root); + Assert.assertEquals("[3, 2, 4, 1, 5]", result.toString()); + + } + + @Test + public void testPostOrderVisit() { + + + List result = BinaryTreeUtil.postOrderVisit(root); + Assert.assertEquals("[3, 4, 2, 5, 1]", result.toString()); + + } + + + @Test + public void testInOrderVisitWithoutRecursion() { + BinaryTreeNode node = root.getLeft().getRight(); + node.setLeft(new BinaryTreeNode(6)); + node.setRight(new BinaryTreeNode(7)); + + List result = BinaryTreeUtil.inOrderWithoutRecursion(root); + Assert.assertEquals("[3, 2, 6, 4, 7, 1, 5]", result.toString()); + + } + + @Test + public void testPreOrderVisitWithoutRecursion() { + BinaryTreeNode node = root.getLeft().getRight(); + node.setLeft(new BinaryTreeNode(6)); + node.setRight(new BinaryTreeNode(7)); + + List result = BinaryTreeUtil.preOrderWithoutRecursion(root); + Assert.assertEquals("[1, 2, 3, 4, 6, 7, 5]", result.toString()); + + } +} \ No newline at end of file diff --git a/group24/315863321/src/test/java/com/johnChnia/coding2017/basic/tree/FileListTest.java b/group24/315863321/src/test/java/com/johnChnia/coding2017/basic/tree/FileListTest.java new file mode 100644 index 0000000000..b47fe538d2 --- /dev/null +++ b/group24/315863321/src/test/java/com/johnChnia/coding2017/basic/tree/FileListTest.java @@ -0,0 +1,29 @@ +package com.johnChnia.coding2017.basic.tree; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import java.io.File; + +/** + * Created by john on 2017/5/20. + */ +public class FileListTest { + private FileList fileList; + private static final String PATH = "/Users/john/Desktop/zst"; + + @Before + public void setUp() throws Exception { + fileList = new FileList(); + } + + @Test + public void list() throws Exception { + FileList.TreeInfo treeInfo = fileList.list(new File(PATH)); + Assert.assertEquals(3, treeInfo.dirs.size()); + Assert.assertEquals(8, treeInfo.files.size()); + + } + +} \ No newline at end of file diff --git a/group24/75939388/learning2017/src/main/java/basic/dataStructure/binaryTree/BinarySearchTree.java b/group24/75939388/learning2017/src/main/java/basic/dataStructure/binaryTree/BinarySearchTree.java new file mode 100644 index 0000000000..acbb5c7083 --- /dev/null +++ b/group24/75939388/learning2017/src/main/java/basic/dataStructure/binaryTree/BinarySearchTree.java @@ -0,0 +1,92 @@ +package basic.dataStructure.binaryTree; + +import java.util.List; + +public class BinarySearchTree { + + BinaryTreeNode root; + + public BinarySearchTree(BinaryTreeNode root) { + this.root = root; + } + + public BinaryTreeNode getRoot() { + return root; + } + + public T findMin() { + return findMin(root); + } + + private T findMin(BinaryTreeNode root){ + List list = BinaryTreeUtil.preOrderVisit(root); + T min = list.get(0); + for (T t : list) { + min = min.compareTo(t) == -1 ? min : t; + } + return min; + } + + public T findMax() { + return findMax(root); + } + + private T findMax(BinaryTreeNode root){ + List list = BinaryTreeUtil.preOrderVisit(root); + T max = list.get(0); + for (T t : list) { + max = max.compareTo(t) == 1 ? max : t; + } + return max; + } + + public int height() { + return calHeight(root); + } + + private int calHeight(BinaryTreeNode root) { + if (root == null) return 0; + + int left = calHeight(root.left); + int right = calHeight(root.right); + + return (left > right ? left : right) + 1; + + } + + public int size() { + List list = BinaryTreeUtil.preOrderVisit(root); + return list.size(); + } + + public void remove(T e) { + remove(root, (Integer) e); + } + + private void remove(BinaryTreeNode node, int value) { + if (node == null) throw new RuntimeException("no such node has value = " + value); + + T data = node.getData(); + if (data.compareTo(value) == 0) { + if (node.left == null && node.right == null) { + node = null; + } else if (node.left != null && node.right == null) { + node.data = node.left.data; + node.left = null; + } else if (node.left == null && node.right != null) { + node.data = node.right.data; + node.right = null; + } else { + T replace = findMin(node.right); + node.data = replace; + remove(node.right, (Integer)replace); + } + } else if (data.compareTo(value) == -1) { + remove(node.right, value); + } else { + remove(node.left, value); + } + } + +} + diff --git a/group24/75939388/learning2017/src/main/java/basic/dataStructure/binaryTree/BinaryTreeNode.java b/group24/75939388/learning2017/src/main/java/basic/dataStructure/binaryTree/BinaryTreeNode.java index b2b96c0349..60783a166b 100644 --- a/group24/75939388/learning2017/src/main/java/basic/dataStructure/binaryTree/BinaryTreeNode.java +++ b/group24/75939388/learning2017/src/main/java/basic/dataStructure/binaryTree/BinaryTreeNode.java @@ -72,9 +72,9 @@ public class BinaryTreeNode { //// //// return dataStr.toString(); //// } - private T data; - private BinaryTreeNode left; - private BinaryTreeNode right; + public T data; + public BinaryTreeNode left; + public BinaryTreeNode right; public BinaryTreeNode(T data){ this.data=data; diff --git a/group24/75939388/learning2017/src/main/java/basic/dataStructure/binaryTree/FileList.java b/group24/75939388/learning2017/src/main/java/basic/dataStructure/binaryTree/FileList.java index 7d7af85490..8beb22f031 100644 --- a/group24/75939388/learning2017/src/main/java/basic/dataStructure/binaryTree/FileList.java +++ b/group24/75939388/learning2017/src/main/java/basic/dataStructure/binaryTree/FileList.java @@ -2,9 +2,56 @@ import java.io.File; +/** + * 给定一个目录,递归的列出下面所有的子目录和文件 + * + */ public class FileList { - public void list(File f) { + + public void list(File f, int level) { + if(!f.exists()){ + throw new RuntimeException("file " + f.getAbsolutePath() + " not existed"); + } + + StringBuilder head = new StringBuilder(); + head.append("|--").append(f.getName()); + System.out.println(head.toString()); + + File[] files = f.listFiles(); + for(File file : files){ + if(file.isDirectory()){ + printDirectory(file, level + 1); + }else{ + printFile(file, level); + } + } + } - + private void printDirectory(File f, int level){ + StringBuilder builder = new StringBuilder(); + for(int i = 0; i < level; i++){ + builder.append(" "); + } + builder.append("|--").append(f.getName()); + System.out.println(builder.toString()); + + File[] files = f.listFiles(); + for(File file : files){ + if(file.isDirectory()){ + printDirectory(file, level + 1); + }else{ + printFile(file, level); + } + } + } + + private void printFile(File f, int level){ + StringBuilder builder = new StringBuilder(); + for(int i = 0; i < level + 1; i++){ + builder.append(" "); + } + builder.append("|->").append(f.getName()); + System.out.println(builder.toString()); + } } diff --git a/group24/75939388/learning2017/src/main/java/basic/dataStructure/stack/expr/Calculator.java b/group24/75939388/learning2017/src/main/java/basic/dataStructure/stack/expr/Calculator.java index fe6510b532..236751360b 100644 --- a/group24/75939388/learning2017/src/main/java/basic/dataStructure/stack/expr/Calculator.java +++ b/group24/75939388/learning2017/src/main/java/basic/dataStructure/stack/expr/Calculator.java @@ -17,6 +17,7 @@ public static float getFloat(float val1, float val2, String oper) { if (val2 == 0) throw new RuntimeException("cannot divide 0, calculation canceled"); res = val1 / val2; } + // System.out.println("计算结果: " + val1 + oper + val2 + "=" + res); return res; } diff --git a/group24/75939388/learning2017/src/main/java/designPattern/decorator/Beverage.java b/group24/75939388/learning2017/src/main/java/designPattern/decorator/Beverage.java deleted file mode 100644 index e68e2e7b82..0000000000 --- a/group24/75939388/learning2017/src/main/java/designPattern/decorator/Beverage.java +++ /dev/null @@ -1,23 +0,0 @@ -package designPattern.decorator; - -/** - * @author : 温友朝 - * @date : 2017/5/5 - */ -public abstract class Beverage { - public static final int TALL = 0; - public static final int GRANDE = 1; - public static final int VENTI = 2; - - - public String description = ""; - public static int size = TALL; - - public String getDescription(){ - return description; - } - - public abstract double cost(); - - public abstract int size(); -} diff --git a/group24/75939388/learning2017/src/main/java/designPattern/decorator/CondimentDecorator.java b/group24/75939388/learning2017/src/main/java/designPattern/decorator/CondimentDecorator.java deleted file mode 100644 index dca6ade059..0000000000 --- a/group24/75939388/learning2017/src/main/java/designPattern/decorator/CondimentDecorator.java +++ /dev/null @@ -1,9 +0,0 @@ -package designPattern.decorator; - -/** - * @author : 温友朝 - * @date : 2017/5/5 - */ -public abstract class CondimentDecorator extends Beverage { - public abstract String getDescription(); -} diff --git a/group24/75939388/learning2017/src/main/java/designPattern/decorator/beverages/DarkRoast.java b/group24/75939388/learning2017/src/main/java/designPattern/decorator/beverages/DarkRoast.java deleted file mode 100644 index 2c39efecf9..0000000000 --- a/group24/75939388/learning2017/src/main/java/designPattern/decorator/beverages/DarkRoast.java +++ /dev/null @@ -1,24 +0,0 @@ -package designPattern.decorator.beverages; - -import designPattern.decorator.Beverage; - -/** - * @author : 温友朝 - * @date : 2017/5/5 - */ -public class DarkRoast extends Beverage { - - public DarkRoast(){ - description = "Dark Roast"; - } - - @Override - public double cost() { - return 0.99; - } - - @Override - public int size() { - return 0; - } -} diff --git a/group24/75939388/learning2017/src/main/java/designPattern/decorator/beverages/Decaf.java b/group24/75939388/learning2017/src/main/java/designPattern/decorator/beverages/Decaf.java deleted file mode 100644 index bb4f757ad4..0000000000 --- a/group24/75939388/learning2017/src/main/java/designPattern/decorator/beverages/Decaf.java +++ /dev/null @@ -1,24 +0,0 @@ -package designPattern.decorator.beverages; - -import designPattern.decorator.Beverage; - -/** - * @author : 温友朝 - * @date : 2017/5/5 - */ -public class Decaf extends Beverage { - - public Decaf(){ - description = "Decaf"; - } - - @Override - public double cost() { - return 1.99; - } - - @Override - public int size() { - return 0; - } -} diff --git a/group24/75939388/learning2017/src/main/java/designPattern/decorator/beverages/Espresso.java b/group24/75939388/learning2017/src/main/java/designPattern/decorator/beverages/Espresso.java deleted file mode 100644 index dca41cc66c..0000000000 --- a/group24/75939388/learning2017/src/main/java/designPattern/decorator/beverages/Espresso.java +++ /dev/null @@ -1,24 +0,0 @@ -package designPattern.decorator.beverages; - -import designPattern.decorator.Beverage; - -/** - * @author : 温友朝 - * @date : 2017/5/5 - */ -public class Espresso extends Beverage { - - public Espresso(){ - description = "Espresso"; - } - - public double cost() { - return 1.99d; - } - - - @Override - public int size() { - return 0; - } -} diff --git a/group24/75939388/learning2017/src/main/java/designPattern/decorator/beverages/HouseBlend.java b/group24/75939388/learning2017/src/main/java/designPattern/decorator/beverages/HouseBlend.java deleted file mode 100644 index 8b296aa3cf..0000000000 --- a/group24/75939388/learning2017/src/main/java/designPattern/decorator/beverages/HouseBlend.java +++ /dev/null @@ -1,23 +0,0 @@ -package designPattern.decorator.beverages; - -import designPattern.decorator.Beverage; - -/** - * @author : 温友朝 - * @date : 2017/5/5 - */ -public class HouseBlend extends Beverage { - - public HouseBlend(){ - description = "House Blend"; - } - - public double cost() { - return 0.89; - } - - @Override - public int size() { - return 0; - } -} diff --git a/group24/75939388/learning2017/src/main/java/designPattern/decorator/condiments/Mocha.java b/group24/75939388/learning2017/src/main/java/designPattern/decorator/condiments/Mocha.java deleted file mode 100644 index 799399332f..0000000000 --- a/group24/75939388/learning2017/src/main/java/designPattern/decorator/condiments/Mocha.java +++ /dev/null @@ -1,31 +0,0 @@ -package designPattern.decorator.condiments; - -import designPattern.decorator.Beverage; -import designPattern.decorator.CondimentDecorator; - -/** - * @author : 温友朝 - * @date : 2017/5/5 - */ -public class Mocha extends CondimentDecorator { - Beverage beverage; - - public Mocha(Beverage beverage){ - this.beverage = beverage; - - this.description += this.beverage.description + ", Mocha"; - } - - public String getDescription() { - return this.description; - } - - public double cost() { - return 0.2 + beverage.cost(); - } - - @Override - public int size() { - return 0; - } -} diff --git a/group24/75939388/learning2017/src/main/java/designPattern/decorator/condiments/Soy.java b/group24/75939388/learning2017/src/main/java/designPattern/decorator/condiments/Soy.java deleted file mode 100644 index ec4873c914..0000000000 --- a/group24/75939388/learning2017/src/main/java/designPattern/decorator/condiments/Soy.java +++ /dev/null @@ -1,31 +0,0 @@ -package designPattern.decorator.condiments; - -import designPattern.decorator.Beverage; -import designPattern.decorator.CondimentDecorator; - -/** - * @author : 温友朝 - * @date : 2017/5/5 - */ -public class Soy extends CondimentDecorator { - Beverage beverage; - - public Soy(Beverage beverage){ - this.beverage = beverage; - - this.description += this.beverage.description + ", Soy"; - } - - public String getDescription() { - return this.description; - } - - public double cost() { - return 0.15 + beverage.cost(); - } - - @Override - public int size() { - return 0; - } -} diff --git a/group24/75939388/learning2017/src/main/java/designPattern/decorator/condiments/Whip.java b/group24/75939388/learning2017/src/main/java/designPattern/decorator/condiments/Whip.java deleted file mode 100644 index 7b8cce87af..0000000000 --- a/group24/75939388/learning2017/src/main/java/designPattern/decorator/condiments/Whip.java +++ /dev/null @@ -1,31 +0,0 @@ -package designPattern.decorator.condiments; - -import designPattern.decorator.Beverage; -import designPattern.decorator.CondimentDecorator; - -/** - * @author : 温友朝 - * @date : 2017/5/5 - */ -public class Whip extends CondimentDecorator { - Beverage beverage; - - public Whip(Beverage beverage){ - this.beverage = beverage; - - this.description += beverage.description + ", "; - } - - public String getDescription() { - return this.description; - } - - public double cost() { - return 0.1 + beverage.cost(); - } - - @Override - public int size() { - return 0; - } -} diff --git a/group24/75939388/learning2017/src/main/java/miniJVM/print/ConstantPoolPrinter.java b/group24/75939388/learning2017/src/main/java/miniJVM/print/ConstantPoolPrinter.java index c776f49f01..c0f5d7d3de 100644 --- a/group24/75939388/learning2017/src/main/java/miniJVM/print/ConstantPoolPrinter.java +++ b/group24/75939388/learning2017/src/main/java/miniJVM/print/ConstantPoolPrinter.java @@ -73,42 +73,6 @@ public void visitUTF8(UTF8Info info) { System.out.print(i + "# = "); ConstantInfo cnst = pool.getConstantInfo(i); cnst.accept(visitor); -// if(cnst instanceof ClassInfo){ -// sb.append("Class "); -// sb.append("#" + ((ClassInfo) cnst).getUtf8Index()); -// sb.append(" //" + ((ClassInfo) cnst).getClassName()); -// }else if(cnst instanceof UTF8Info){ -// sb.append("Utf8 "); -// sb.append(((UTF8Info) cnst).getValue()); -// }else if(cnst instanceof MethodRefInfo){ -// sb.append("MethodRef "); -// sb.append("#" + ((MethodRefInfo) cnst).getClassInfoIndex()); -// sb.append(".").append("#" + ((MethodRefInfo) cnst).getNameAndTypeIndex()); -// sb.append(" //" + ((MethodRefInfo) cnst).getClassName()); -// sb.append("." + ((MethodRefInfo) cnst).getMethodName()); -// sb.append(":" + ((MethodRefInfo) cnst).getParamAndReturnType()); -// }else if(cnst instanceof NameAndTypeInfo){ -// sb.append("NameAndType "); -// sb.append("#" + ((NameAndTypeInfo) cnst).getIndex1()); -// sb.append(":#" + ((NameAndTypeInfo) cnst).getIndex2()); -// sb.append(" //" + ((NameAndTypeInfo) cnst).getName()); -// sb.append(":" + ((NameAndTypeInfo) cnst).getTypeInfo()); -// }else if(cnst instanceof FieldRefInfo){ -// sb.append("Fieldref "); -// sb.append("#" + ((FieldRefInfo) cnst).getClassInfoIndex()); -// sb.append("." + ((FieldRefInfo) cnst).getNameAndTypeIndex()); -// sb.append(" //" + ((FieldRefInfo) cnst).getClassName()); -// sb.append("." + ((FieldRefInfo) cnst).getFieldName()); -// sb.append(":" + ((FieldRefInfo) cnst).getFieldType()); -// }else if(cnst instanceof StringInfo){ -// sb.append("String "); -// sb.append("#" + ((StringInfo) cnst).getIndex()); -// sb.append(" //" + cnst.toString()); -// }else{ -// throw new RuntimeException(cnst.getType() + "not processed"); -// } - -// System.out.println(sb.toString()); } } } diff --git a/group24/75939388/learning2017/src/test/java/data_structure/tree/BinarySearchTreeTest.java b/group24/75939388/learning2017/src/test/java/data_structure/tree/BinarySearchTreeTest.java new file mode 100644 index 0000000000..6dbef3a2bc --- /dev/null +++ b/group24/75939388/learning2017/src/test/java/data_structure/tree/BinarySearchTreeTest.java @@ -0,0 +1,62 @@ +package data_structure.tree; + +import basic.dataStructure.binaryTree.BinarySearchTree; +import basic.dataStructure.binaryTree.BinaryTreeNode; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + + + +public class BinarySearchTreeTest { + + BinarySearchTree tree = null; + + @Before + public void setUp() throws Exception { + BinaryTreeNode root = new BinaryTreeNode(6); + root.left = new BinaryTreeNode(2); + root.right = new BinaryTreeNode(8); + root.left.left = new BinaryTreeNode(1); + root.left.right = new BinaryTreeNode(4); + root.left.right.left = new BinaryTreeNode(3); + tree = new BinarySearchTree(root); + } + + @After + public void tearDown() throws Exception { + tree = null; + } + + @Test + public void testFind() { + Assert.assertEquals(1, tree.findMin().intValue()); + Assert.assertEquals(8, tree.findMax().intValue()); + } + + @Test + public void testHeight() { + Assert.assertEquals(4, tree.height()); + } + + @Test + public void testSize() { + Assert.assertEquals(6, tree.size()); + } + + @Test + public void testRemoveLeaf() { + tree.remove(4); + BinaryTreeNode root= tree.getRoot(); + Assert.assertEquals(3, root.left.right.data.intValue()); + + } + @Test + public void testRemoveMiddleNode() { + tree.remove(2); + BinaryTreeNode root= tree.getRoot(); + Assert.assertEquals(3, root.left.data.intValue()); + Assert.assertEquals(4, root.left.right.data.intValue()); + } +} diff --git a/group24/75939388/learning2017/src/test/java/data_structure/binaryTree/BinaryTreeUtilTest.java b/group24/75939388/learning2017/src/test/java/data_structure/tree/BinaryTreeUtilTest.java similarity index 98% rename from group24/75939388/learning2017/src/test/java/data_structure/binaryTree/BinaryTreeUtilTest.java rename to group24/75939388/learning2017/src/test/java/data_structure/tree/BinaryTreeUtilTest.java index 09b50a1148..b3657aece4 100644 --- a/group24/75939388/learning2017/src/test/java/data_structure/binaryTree/BinaryTreeUtilTest.java +++ b/group24/75939388/learning2017/src/test/java/data_structure/tree/BinaryTreeUtilTest.java @@ -1,4 +1,4 @@ -package data_structure.binaryTree; +package data_structure.tree; import basic.dataStructure.binaryTree.BinaryTreeNode; import basic.dataStructure.binaryTree.BinaryTreeUtil; diff --git a/group24/75939388/learning2017/src/test/java/data_structure/tree/FileListTest.java b/group24/75939388/learning2017/src/test/java/data_structure/tree/FileListTest.java new file mode 100644 index 0000000000..18f3bddc0a --- /dev/null +++ b/group24/75939388/learning2017/src/test/java/data_structure/tree/FileListTest.java @@ -0,0 +1,28 @@ +package data_structure.tree; + +import basic.dataStructure.binaryTree.FileList; +import org.junit.Before; +import org.junit.Test; + +import java.io.File; + +/** + * Created by macvi on 2017/5/16. + */ +public class FileListTest { + + FileList fl = null; + + @Before + public void init(){ + fl = new FileList(); + } + + @Test + public void test(){ + String path1 = "E:\\Downloads"; + String path2 = "E:\\系统ISO"; + + fl.list(new File(path2), 0); + } +} diff --git a/group24/75939388/learning2017/src/test/java/designPattern/StarBuzzCoffeeTest.java b/group24/75939388/learning2017/src/test/java/designPattern/StarBuzzCoffeeTest.java deleted file mode 100644 index 8f04ce4ff1..0000000000 --- a/group24/75939388/learning2017/src/test/java/designPattern/StarBuzzCoffeeTest.java +++ /dev/null @@ -1,35 +0,0 @@ -package designPattern; - -import designPattern.decorator.Beverage; -import designPattern.decorator.beverages.DarkRoast; -import designPattern.decorator.beverages.Espresso; -import designPattern.decorator.beverages.HouseBlend; -import designPattern.decorator.condiments.Mocha; -import designPattern.decorator.condiments.Soy; -import designPattern.decorator.condiments.Whip; -import org.junit.Test; - -/** - * @author : 温友朝 - * @date : 2017/5/5 - */ -public class StarBuzzCoffeeTest { - - @Test - public void test1(){ - Beverage espresso = new Espresso(); - System.out.println(espresso.getDescription() + " cost $" + espresso.cost()); - - Beverage darkRoast = new DarkRoast(); - darkRoast = new Mocha(darkRoast); - darkRoast = new Mocha(darkRoast); - darkRoast = new Whip(darkRoast); - System.out.println(darkRoast.getDescription() + " cost $" + darkRoast.cost()); - - Beverage houseBlend = new HouseBlend(); - houseBlend = new Soy(houseBlend); - houseBlend = new Mocha(houseBlend); - houseBlend = new Whip(houseBlend); - System.out.println(houseBlend.getDescription() + " cost $" + houseBlend.cost()); - } -} diff --git a/group24/75939388/learning2017/src/test/java/gabageCollection/MemoryLeakSimulation.java b/group24/75939388/learning2017/src/test/java/gabageCollection/MemoryLeakSimulation.java new file mode 100644 index 0000000000..483efec77d --- /dev/null +++ b/group24/75939388/learning2017/src/test/java/gabageCollection/MemoryLeakSimulation.java @@ -0,0 +1,33 @@ +package gabageCollection; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author : 温友朝 + * @date : 2017/5/17 + */ +public class MemoryLeakSimulation { + + public static void testOutOfMemory(){ +// List list = new ArrayList(); + List list = new ArrayList(); + for(;;){ + list.add(new byte[10*1024*1024]); + } + } + + public static void testStackOverFlowError(){ + testStackOverFlowError(); + } + + public static void testOutOfMemoryPermGenSpace(){ + //出现在热部署时最多 + } + + public static void main(String[] args){ +// testOutOfMemory(); +// testStackOverFlowError(); + testOutOfMemoryPermGenSpace(); + } +} diff --git a/group24/75939388/learning2017/src/test/java/thread/ThreadTest.java b/group24/75939388/learning2017/src/test/java/thread/ThreadTest.java new file mode 100644 index 0000000000..8463d6e4ab --- /dev/null +++ b/group24/75939388/learning2017/src/test/java/thread/ThreadTest.java @@ -0,0 +1,27 @@ +package thread; + +/** + * Created by macvi on 2017/5/3. + */ +public class ThreadTest extends Thread { + boolean stop = false; + int value = 0; + public void run() { + while (!stop) { + value++; + } + } + public static void main(String[] args) + throws Exception { + + ThreadTest t = new ThreadTest(); + t.start(); + Thread.sleep(2000); + t.stop = true; + System.out.println("value = " + t.value); + Thread.sleep(2000); + System.out.println("value = " + t.value); + + } +} + diff --git a/group24/Homework/11-EleventhWeek/BinarySearchTree.java b/group24/Homework/11-EleventhWeek/BinarySearchTree.java new file mode 100644 index 0000000000..ab8abbfe9f --- /dev/null +++ b/group24/Homework/11-EleventhWeek/BinarySearchTree.java @@ -0,0 +1,29 @@ +package com.coding.basic.tree; + +public class BinarySearchTree { + + BinaryTreeNode root; + public BinarySearchTree(BinaryTreeNode root){ + this.root = root; + } + public BinaryTreeNode getRoot(){ + return root; + } + public T findMin(){ + return null; + } + public T findMax(){ + return null; + } + public int height() { + return -1; + } + public int size() { + return -1; + } + public void remove(T e){ + + } + +} + diff --git a/group24/Homework/11-EleventhWeek/BinarySearchTreeTest.java b/group24/Homework/11-EleventhWeek/BinarySearchTreeTest.java new file mode 100644 index 0000000000..8772089710 --- /dev/null +++ b/group24/Homework/11-EleventhWeek/BinarySearchTreeTest.java @@ -0,0 +1,67 @@ +package com.coding.basic.tree; + +import static org.junit.Assert.fail; + +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + + + +public class BinarySearchTreeTest { + + BinarySearchTree tree = null; + + @Before + public void setUp() throws Exception { + BinaryTreeNode root = new BinaryTreeNode(6); + root.left = new BinaryTreeNode(2); + root.right = new BinaryTreeNode(8); + root.left.left = new BinaryTreeNode(1); + root.left.right = new BinaryTreeNode(4); + root.left.right.left = new BinaryTreeNode(3); + tree = new BinarySearchTree(root); + } + + @After + public void tearDown() throws Exception { + tree = null; + } + + @Test + public void testFindMin() { + Assert.assertEquals(1, tree.findMin().intValue()); + + } + + @Test + public void testFindMax() { + Assert.assertEquals(8, tree.findMax().intValue()); + } + + @Test + public void testHeight() { + Assert.assertEquals(4, tree.height()); + } + + @Test + public void testSize() { + Assert.assertEquals(6, tree.size()); + } + + @Test + public void testRemoveLeaf() { + tree.remove(4); + BinaryTreeNode root= tree.getRoot(); + Assert.assertEquals(3, root.left.right.data.intValue()); + + } + @Test + public void testRemoveMiddleNode() { + tree.remove(2); + BinaryTreeNode root= tree.getRoot(); + Assert.assertEquals(3, root.left.data.intValue()); + Assert.assertEquals(4, root.left.right.data.intValue()); + } +} diff --git a/group24/Homework/11-EleventhWeek/BinaryTreeNode.java b/group24/Homework/11-EleventhWeek/BinaryTreeNode.java new file mode 100644 index 0000000000..c1421cd398 --- /dev/null +++ b/group24/Homework/11-EleventhWeek/BinaryTreeNode.java @@ -0,0 +1,35 @@ +package com.coding.basic.tree; + +public class BinaryTreeNode { + + public T data; + public BinaryTreeNode left; + public BinaryTreeNode right; + + public BinaryTreeNode(T data){ + this.data=data; + } + public T getData() { + return data; + } + public void setData(T data) { + this.data = data; + } + public BinaryTreeNode getLeft() { + return left; + } + public void setLeft(BinaryTreeNode left) { + this.left = left; + } + public BinaryTreeNode getRight() { + return right; + } + public void setRight(BinaryTreeNode right) { + this.right = right; + } + + public BinaryTreeNode insert(Object o){ + return null; + } + +} diff --git a/group24/Homework/12-TwelfthWeek/BinarySearchTree.java b/group24/Homework/12-TwelfthWeek/BinarySearchTree.java new file mode 100644 index 0000000000..aea8affc09 --- /dev/null +++ b/group24/Homework/12-TwelfthWeek/BinarySearchTree.java @@ -0,0 +1,48 @@ +package com.coding.basic.tree; + +import java.util.ArrayList; +import java.util.List; + +import com.coding.basic.queue.Queue; + +public class BinarySearchTree { + + BinaryTreeNode root; + public BinarySearchTree(BinaryTreeNode root){ + this.root = root; + } + public BinaryTreeNode getRoot(){ + return root; + } + public T findMin(){ + return null; + } + public T findMax(){ + return null; + } + public int height() { + return -1; + } + public int size() { + return -1; + } + public void remove(T e){ + + } + public List levelVisit(){ + + return null; + } + public boolean isValid(){ + return false; + } + public T getLowestCommonAncestor(T n1, T n2){ + return null; + + } + public List getNodesBetween(T n1, T n2){ + return null; + } + +} + diff --git a/liuxin/data-structure/assignment/src/com/coding/basic/tree/BinarySearchTree.java b/liuxin/data-structure/assignment/src/com/coding/basic/tree/BinarySearchTree.java index 0c05564b15..f01cbe358b 100644 --- a/liuxin/data-structure/assignment/src/com/coding/basic/tree/BinarySearchTree.java +++ b/liuxin/data-structure/assignment/src/com/coding/basic/tree/BinarySearchTree.java @@ -1,5 +1,10 @@ package com.coding.basic.tree; +import java.util.ArrayList; +import java.util.List; + +import com.coding.basic.queue.Queue; + public class BinarySearchTree { BinaryTreeNode root; @@ -24,6 +29,20 @@ public int size() { public void remove(T e){ } + public List levelVisit(){ + + return null; + } + public boolean isValid(){ + return false; + } + public T getLowestCommonAncestor(T n1, T n2){ + return null; + + } + public List getNodesBetween(T n1, T n2){ + return null; + } }