`

Java 编程思想 泛型 末端哨兵例子解读

阅读更多

    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编程语言中的一个重要特性,它引入于JDK 5.0,极大地提高了代码的类型安全性和可读性。泛型允许我们在类、接口和方法中使用类型参数,这样我们可以在编译时检查类型,避免了运行时类型转换的麻烦和潜在的...

    Java中的泛型简析实战.zip

    Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战...

    java反射与泛型综合例子

    Java反射和泛型是Java编程中的两个重要特性,它们各自为开发者提供了强大的功能,并且在特定情况下可以相互结合使用。本文将深入探讨这两个概念,并通过一个具体的`Testrefl.java`示例来阐述它们的应用。 Java反射...

    3.java实例化泛型类.zip

    3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3.java实例化泛型类.zip3....

    Java泛型_Java中的泛型结构_

    Java泛型是Java编程语言中一个强大的特性,它允许在定义类、接口和方法时使用类型参数,从而实现参数化类型。泛型的主要目标是提高代码的类型安全性和重用性,减少类型转换的麻烦,并在编译时捕获可能的类型错误。...

    《java编程思想》_java编程思想_java编程思想_ThinkinginJava_mileefx_

    《Java编程思想》是Java程序员领域的一本经典之作,由Bruce Eckel撰写,以其深入浅出的讲解方式和丰富的实例闻名。这本书对于想要深入理解Java语言的人来说,是一份宝贵的资源。"Thinking in Java",直译为“思考...

    关于java基础的泛型的练习

    通过以上知识点,我们可以看到Java泛型在编程中的重要性和灵活性。理解和掌握这些概念对于编写高效、安全的Java代码至关重要。在实际开发中,熟练运用泛型可以显著提高代码质量,减少潜在的错误,并提高代码的可维护...

    Java泛型编程最全总结

    Java泛型是Java编程语言中的一个关键特性,它在2004年随着JDK 5.0的发布被引入,极大地增强了代码的类型安全性和重用性。泛型允许我们在编写类、接口和方法时指定参数化类型,使得代码在编译时期就能捕获类型错误,...

    基于Java的泛型编程

    标题和描述均聚焦于“基于Java的泛型编程”,这一主题深入探讨了Java语言中泛型编程的概念、优点以及其实现机制。以下是对这一主题的详细解析,旨在全面阐述泛型编程在Java中的应用及其重要性。 ### 泛型编程的意义...

    Java 实现泛型List

    Java 实现泛型List的源码,基本实现了List接口的全部所有方法。欢迎大家发表自己的观点和建议。

    java编程思想第四版源代码.7z

    《Java编程思想》是 Bruce Eckel 的经典著作,第四版更是深入浅出地介绍了Java语言的核心概念和技术。这个压缩包包含的源代码是书中的示例程序,它们旨在帮助读者理解书中阐述的各种编程原理和实践。通过分析这些源...

    Java如何获取泛型类型

    Java 运行时如何获取泛型参数的类型 Java类型Type 之 ParameterizedType,GenericArrayType,TypeVariabl,WildcardType 从实现的接口获取泛型参数 定义一个泛型父类: public interface SuperClass { String ...

    Java集合框架及泛型

    Java集合框架是Java编程语言中一个非常重要的组成部分,它提供了一组高效的数据结构和操作这些数据结构的方法。泛型则是Java在J2SE 5.0版本引入的一个特性,极大地提高了代码的类型安全性和可读性。下面我们将深入...

    Java中的泛型

    ### Java中的泛型 #### 什么是泛型? 泛型是Java SE 5.0中引入的一项新特性,它允许在程序设计中使用参数化类型,从而实现类型安全的集合类和其他容器类。在使用泛型之前,Java程序员通常依赖于Object类型作为通用...

    java io流 xml 泛型 例子学习

    Java IO流、XML和泛型是Java编程中的关键概念,对于任何Java开发者来说,理解和熟练掌握这些技术至关重要。本文将深入探讨这三个主题,并通过具体的例子进行学习。 首先,我们来看Java IO流。IO流在Java中是用来...

    JAVA泛型加减乘除

    这是一个使用JAVA实现的泛型编程,分为两部分,第一部分创建泛型类,并实例化泛型对象,得出相加结果。 第二部分用户自行输入0--4,选择要进行的加减乘除运算或退出,再输入要进行运算的两个数,并返回运算结果及...

    java基础(多线程,IO,集合,网络编程,泛型)

    本资源包“java基础(多线程,IO,集合,网络编程,泛型)”提供了对Java核心技术的全面介绍,包括五个核心主题:多线程、输入/输出(IO)、集合框架、网络编程和泛型。以下是对这些主题的详细讲解: 1. **多线程**: - ...

    侯捷-java编程思想.pdf

    《侯捷-Java编程思想》是一本深受Java开发者喜爱的经典著作,尽管是繁体版本,但其中也包含英文内容,方便不同语言背景的读者理解。这本书深入浅出地讲解了Java编程的核心概念和技术,旨在帮助读者掌握Java编程的...

Global site tag (gtag.js) - Google Analytics