最近看了部分Java的源码后,稍微理解了一点源码对于LinkedList,ArrayList,Tree的写法。所以在此,记录自己对于这些数据结构的仿写,以方便以后的复习。
(一)Tree
public class Node<T> {
T t;
Node<T> left;
Node<T> right;
public Node(Node<T> left,T t,Node<T> right){
this.left = left;
this.t = t;
this.right = right;
}
}
public class Tree<T> implements Comparable<T>{
Node<T> now;
Node<T> root;
Integer size = 0;
public Tree(T t){
root = new Node<T>(null,t,null);
size++;
}
public void add(T t){
if(!checkRoot(t)){
now = root;
judge(t);
size++;
}
}
/**
* @param t
* 判断当前值和t的大小,t小就在左,大则在右
*/
public void judge(T t){
int compare = this.compareTo(t);
if(compare<0){
if(now.right!=null){
now = now.right;
judge(t);
}else{
now.right = new Node<T>(null,t,null);
}
}else if(compare>0){
//小,如果下一个left不为空,则跟下一个left比较,一直到放置在最合理的位置
if(now.left!=null){
now = now.left;
judge(t);
}else{
now.left = new Node<T>(null,t,null);
}
}else if(compare == 0){
now.t = t;
size--;
}
}
/**
* @param t
* 判断是否有根节点,没有就自动创建一个
*/
public boolean checkRoot(T t){
if(root==null){
root = new Node<>(null,t,null);