java的泛型给编程带来了很大的灵活性,它非常重要的一点就是类型实现了参数化,下面就来解读书中一个例子,一个堆栈类,书中的第357页,java代码如下:
package com.cn.java;
/**
*
* <p>
* 堆栈
* <p>
*
* @author Lqy
*
*/
public class LinkedStack<T> {
//堆栈中的节点
class Node<U> {
private U item;// 节点的值
private Node<U> next;// 前一个节点
Node() {
item = null;
next = null;
}
Node(U item, Node<U> next) {
this.item = item;
this.next = next;
}
/**
* 用于判断堆栈是否为空,也就是是否遇到了末端哨兵(end sentinel)
*
* @return
*/
boolean end() {
return item == null && next == null;
}
}
/**
* 末端哨兵(end sentinel)
*/
private Node<T> top = new Node<T>();
/**
* 入栈
*
* @param t
*/
public void push(T item) {
//当有新值插入的时候,改变top的指向,改变top指向之前先将top往下压。
top = new Node<T>(item, top);
}
/**
* 出栈
*
* @return
*/
public T pop() {
//出栈的时候,每次都取栈顶的值
T result = top.item;
//判断是否遇到了末端哨兵
if (!top.end()) {
top = top.next;
}
return result;
}
public static void main(String[] args) {
LinkedStack<String> stack = new LinkedStack<String>();
stack.push("test1");
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
}
}
这个例子中使用了一个末端哨兵来判断堆栈何时为空。这个末端哨兵是在构造LinkedStack的时候创建的,然后,每调用一次push()方法,就会创建一个Node<T>对象,并将其连接到前一个Node<T>对象。当你调用pop()方法时,总是返回top.item,然后丢弃当前top所指的Node<T>,并将top转移到下一个Node<T>,除非你已经碰到了末端哨兵,这个时候就不能再移动top了。如果已经到了末端,客户端程序还继续调用pop()方法,它只能得到null,说明堆栈已经空了。
当堆栈为空的时候,这个末端哨兵就为空了,当往堆栈里面添加数据的时候,末端哨兵被压入底部。
相关推荐
java 一个关于泛型的简单例子 java 一个关于泛型的简单例子 java 一个关于泛型的简单例子
Java泛型编程指南.pdf 此文章译自SUN的泛型编程指南
Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战...
3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3....
Java中的泛型结构请大家指教并指导有不足的地方给予赐教。
java Hashtable的泛型化 java Hashtable的泛型化 java Hashtable的泛型化
实例讲解Java泛型编程的快速入门实例讲解Java泛型编程的快速入门实例讲解Java泛型编程的快速入门实例讲解Java泛型编程的快速入门实例讲解Java泛型编程的快速入门
关于java基础的泛型的练习
Java 实现泛型List的源码,基本实现了List接口的全部所有方法。欢迎大家发表自己的观点和建议。
java io流 xml 泛型 例子学习 很好都是core java2 上面的例子,
Java Generics and Collections 英文版,详细描述java 泛型技术
NULL 博文链接:https://zouwu85.iteye.com/blog/801921
Java 运行时如何获取泛型参数的类型 Java类型Type 之 ParameterizedType,GenericArrayType,TypeVariabl,WildcardType 从实现的接口获取泛型参数 定义一个泛型父类: public interface SuperClass { String ...
java集合 框架 泛型,枚举,有PPT详解,并有实例
java 继承非泛型类示例 java 继承非泛型类示例 java 继承非泛型类示例
这是一个使用JAVA实现的泛型编程,分为两部分,第一部分创建泛型类,并实例化泛型对象,得出相加结果。 第二部分用户自行输入0--4,选择要进行的加减乘除运算或退出,再输入要进行运算的两个数,并返回运算结果及...
详细的介绍了Java是伪泛型的原因,介绍了类型擦除的内容等。
基于Java的泛型编程
泛型编程 [翻译]Java泛型编程指南(上).htm
Java SE编程入门教程 java泛型(共11页).pptx Java SE编程入门教程 java封装继承多态(共56页).pptx Java SE编程入门教程 java集合(共38页).pptx Java SE编程入门教程 java接口(共21页).pptx Java SE编程入门...