import java.lang.reflect.Field;
public class LinkedStack<T> {
class Node<T> {
/**
* value storage object
*/
T item;
/**
* next node
*/
Node<T> next;
/**
* default constructor
*/
Node() {
item = null;
next = null;
}
/**
* full-param constructor
*
* @param item
* @param next
*/
Node(T item, Node<T> next) {
this.item = item;
this.next = next;
}
@Override
public String toString() {
return item == null ? null : item.toString();
}
/**
* judge if linked stack reached its end
*
* @return
*/
boolean end() {
return item == null && next == null;
}
}
/**
* override toString
*/
@Override
public String toString() {
StringBuilder stringBuilder = new StringBuilder("[");
Node<T> temp = top;
while( ! temp.end() ){
stringBuilder.append(temp.toString()+",");
temp = temp.next;
}
int length = stringBuilder.length();
if( stringBuilder.indexOf(",", length-1) > -1 ){
stringBuilder.deleteCharAt(length-1);
}
stringBuilder.append("]");
return stringBuilder.toString();
}
/**
* push operation
*
* @param item
*/
public void push(T item) {
Node<T> insertNode = new Node<>(item, top);
top = insertNode;
}
/**
* pop operation
*
* @return
*/
public T pop() {
T item = top.item;
if (!top.end()) {
top = top.next;
}
return item;
}
/**
* peek
* @return
*/
public T peek(){
T item = top.item;
return item;
}
/**
* top element as leading clue of the linked stack
*/
private Node<T> top = new Node<>();
}
class TestLinkedStack {
public static void main(String[] args) {
LinkedStack<User> stack = new LinkedStack<>();
stack.push(new User("Victor", "Male", 24));
stack.push(new User("Lee", "Male", 24));
User top = stack.peek();
top = null;
System.out.println( stack );
}
}
class User {
public String name;
public String gender;
public int age;
public User(String name, String gender, int age) {
super();
this.name = name;
this.gender = gender;
this.age = age;
}
@Override
public String toString() {
StringBuilder stringBuilder = new StringBuilder("{");
Field[] fields = this.getClass().getDeclaredFields();
for(Field field : fields) {
field.setAccessible(true);
String fieldName = field.getName();
try {
stringBuilder.append(fieldName+":"+field.get(this)+",");
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
int length = stringBuilder.length();
if( stringBuilder.indexOf(",", length-1) > -1 ){
stringBuilder.deleteCharAt(length-1);
}
stringBuilder.append("}");
return stringBuilder.toString();
}
public static void main(String[] args) {
User user = new User("Victor", "Male", 24);
System.out.println(user);
}
}
Java中自定义Stack的Demo
最新推荐文章于 2024-01-11 15:38:10 发布