通用堆栈(破解编码面试)
Generic Stack (Cracking the coding interview)
我在 "Cracking the coding" 面试中理解 Stack class 的实现有一些问题(对于那些有这本书的人来说,它是第 3 章的第一页 "Stack and Queues")。
代码如下所示:
public class MyStack<T>{
private static class StackNode<T>{
private T data;
private StackNode<T> next;
public StackNode(T data){
thid.data = data;
}
}
private StackNode<T> top;
// and so on
}
问题是我真的不明白为什么我要为MyStack
和Stacknode
使用泛型T
。堆栈是 "queue" 个节点,由值组成。
当我自己第一次尝试这样做时,我做了一些看起来更像的事情:
class Stack{
private static class Node{
private Object data;
private Node next;
public Node(Object data){
this.data = data;
}
}
private Node top;
public Stack(){
top = null;
}
public Stack(Node top){
this.top = top;
top.next = null;
}
//and so on
}
对我来说,MyStack<T>
意味着我正在创建一个由另一个对象 T
组成的对象 MyStack
,这没有任何意义。如果栈是由节点组成的,那么我的类型T
应该是类型StackNode
(???)。但是,当我定义 Stacknode<T>
时,它就像在说 Stacknode<Stacknode>
。我想我对泛型类型很困惑,但关键是我不明白为什么像我在代码中那样做是不够的:无论它是什么类型的堆栈,它都是由节点组成的,然后当然可以有一个通用数据,所以我只是说我的节点的数据是Object
类型的,有人能解释一下主要区别吗,或者至少为什么在"Cracking the coding interview"中是这样的?有什么好处?我理解错了什么?
提前致谢!!
这里<T>
的作用是为栈中存储的元素指定一个类型。这里T
是一种模板,在声明时可以替换为任何类型。
例如,如果你想创建一个字符串栈,你可以声明为
Stack<String> myStack;
这将确保内部 class Node
也将使用 String
作为 data
的数据类型。您只需在堆栈声明期间指定类型,就可以了。这样,当您需要一堆 Integer
时,您就不必再次编写 Stack
class。
我在 "Cracking the coding" 面试中理解 Stack class 的实现有一些问题(对于那些有这本书的人来说,它是第 3 章的第一页 "Stack and Queues")。
代码如下所示:
public class MyStack<T>{
private static class StackNode<T>{
private T data;
private StackNode<T> next;
public StackNode(T data){
thid.data = data;
}
}
private StackNode<T> top;
// and so on
}
问题是我真的不明白为什么我要为MyStack
和Stacknode
使用泛型T
。堆栈是 "queue" 个节点,由值组成。
当我自己第一次尝试这样做时,我做了一些看起来更像的事情:
class Stack{
private static class Node{
private Object data;
private Node next;
public Node(Object data){
this.data = data;
}
}
private Node top;
public Stack(){
top = null;
}
public Stack(Node top){
this.top = top;
top.next = null;
}
//and so on
}
对我来说,MyStack<T>
意味着我正在创建一个由另一个对象 T
组成的对象 MyStack
,这没有任何意义。如果栈是由节点组成的,那么我的类型T
应该是类型StackNode
(???)。但是,当我定义 Stacknode<T>
时,它就像在说 Stacknode<Stacknode>
。我想我对泛型类型很困惑,但关键是我不明白为什么像我在代码中那样做是不够的:无论它是什么类型的堆栈,它都是由节点组成的,然后当然可以有一个通用数据,所以我只是说我的节点的数据是Object
类型的,有人能解释一下主要区别吗,或者至少为什么在"Cracking the coding interview"中是这样的?有什么好处?我理解错了什么?
提前致谢!!
这里<T>
的作用是为栈中存储的元素指定一个类型。这里T
是一种模板,在声明时可以替换为任何类型。
例如,如果你想创建一个字符串栈,你可以声明为
Stack<String> myStack;
这将确保内部 class Node
也将使用 String
作为 data
的数据类型。您只需在堆栈声明期间指定类型,就可以了。这样,当您需要一堆 Integer
时,您就不必再次编写 Stack
class。