集合体系在Java中比较重要,整个集合体系是在JDK1.2版本后出现,Collection作为整个体系的顶层,拥有整个体系通用的功能。对于其下面的小弟,也是各有千秋。下面就一道面试题来看看LinkedList及Stack的特点。
需求:用LinkedList模拟实现Stack的功能。
分析:首先,要做这题要明白题目的意图,题目并不难,可是要没看懂题意做起来也不是件容易的事。这道题要求是让自定义一个集合来模拟出Stack类的功能。那问题又来了,Stack到底有什么特点呢?这就要求要对Stack类了解,Stack是栈,栈的特点就是先进后出,其方法有压栈、弹栈和判空。知道了这些,做这题就是水到渠成的事了,接下来看看代码体现。
1 package cn.dolphin; 2 3 import java.util.LinkedList; 4 5 public class StackDemo { 6 public static void main(String[] args) { 7 //为了方便测试,这里就存储遍历String类型。 8 StackEnum<String> se = new StackEnum<>(); 9 se.push("Hello"); 10 se.push("Java"); 11 se.push("World"); 12 while(!se.empty()){ 13 String string = se.pop(); 14 System.out.println(string); 15 } 16 } 17 } 18 //定义泛型类,是因为并不确定自定义集合将来要存储什么类型元素。 19 class StackEnum<E>{ 20 private LinkedList<E> linkedList = null; 21 public StackEnum(){ 22 linkedList = new LinkedList<E>(); 23 } 24 public E push(E e){ 25 //压栈特点:后进的元素在栈顶,想想LinkedList中addFirst()方法。 26 linkedList.addFirst(e);//总在linkedList的开头添加元素。 27 return e;//返回添加的元素。 28 } 29 public E pop(){ 30 //出栈特点:每次栈顶元素出栈。和LinkedList中removeFirst()方法对应。 31 return linkedList.removeFirst();//移除并返回linkedList的第一个元素。 32 } 33 public boolean empty(){ 34 return linkedList.size() == 0;//判断linkedList的长度,用于遍历。 35 } 36 //当然Stack还有一个peek()方法,没有写出,有兴趣的筒子可以自己写写。 37 }
这里再一次看到泛型在Java中的应用,所以知识是需要积累,如果没有前面泛型的支撑,这里就只能写特定的类型。