简单泛型实例
来源:互联网 发布:软件使用培训怎么说 编辑:程序博客网 时间:2024/06/16 08:46
简单的泛型
1.一个堆栈类
//实现内部链式存储机制public class LinkedStack<T> {private static class Node<U>{U item;//Node next;public Node(){this.item=null;this.next=null;}public Node(U item,Node next){this.item=item;this.next=next;}public boolean end(){return this.item==null&&this.next==null;}}private Node<T> top=new Node<T>();//末端哨兵public void put(T item){top=new Node<T>(item,top);}public T pop(){T result=top.item;if(!top.end()){top=top.next;}return result;}public static void main(String[] args) {LinkedStack<String> ls=new LinkedStack<String>();for(String s:"nihao zhongguo welcome!".split(" ")){ls.put(s);}String ss;while((ss=ls.pop())!=null){System.out.println(ss);}}}
内部类Node也是一个泛型,他拥有自己的类型参数。
这个例子试用了末端哨兵来判断堆栈何时为空,这个末端哨兵是在构造LinkedStack时创建的。然后每调用一次push方法,就会创建一个Node<t>对象,并将其链接到前一个Node<T>,当你调用pop方法,总是返回top.item然后丢弃当前top所指的Node<t>,并将top移到下一个node,除非你碰到末端哨兵,这时候就不会移动top了,如果已经到了末端,客户端还在继续调用pop方法,他只能得到null,说明堆栈已经空了。
练习:移除Node类上的类型参数,并修改LinkedStack.java的代码,证明内部类可以访问其外部类的类型参数。
附录:
/*带哨兵的直接顺序查找,n为数组元素个数,key为待查找元素*/int sequential_search(int a[],int n,int key) { int i=n; a[0]=key; //a[0]是监视哨 while(a[i]!=key) //若数组中无key,则一定会得到a[0]=key i--; return i; //查找失败返回0}
值得一提的是设置监视哨这一思想,将a[0]设置成监视哨则可以避免每次比较元素后都需要判断下标是否越界这一问题,从而节省了时间。当然,a[0]中将不能在存放有效元素。
泛型的主要目的之一就是用来指定容器要持有什么类型的对象,而且由编译器来保证类型的正确性。泛型类型也就是另一种类型罢了,只是用来限制类型,容易误导的一点,类字面常量 .class用法是:类.class,不可用于泛型。
阅读全文
1 0
- 简单泛型实例
- 简单的泛型实例
- java 泛型总结 简单实例
- java对异常泛型的简单实例
- JQuery实例Ajax 简单实例
- ActiveMQ简单介绍+简单实例
- C++泛型编程中算法库<algorithm>和向量<vector>的简单实例
- C#控制台基础 同一类下的简单泛型方法实例
- jboss ejb 简单实例
- 简单的struts实例
- AWK简单实例
- Struts简单实例
- xsl+xml简单实例
- Socket编程简单实例
- Spring简单入门实例
- web 打印简单实例
- struts简单入门实例
- .net Remoting简单实例
- 欢迎使用CSDN-markdown编辑器
- 技术选型
- Tornado框架知识系列之四
- STM32串口多机通信(认识2)
- LintCode:二叉树的路径和
- 简单泛型实例
- spark源码阅读一-spark读写文件代码分析
- Hive中的安装和基本操作
- 一个不打开浏览器工具的调试方法
- 对OpenCV中的Mat类的初步认识
- 洛谷P2661 信息传递
- JAVA多线程学习
- Navicat Premium11连接Oracle报ORA-12737
- HDU-6058 Kanade's sum