使用带有 for 循环整数的堆栈 - 需要使用任意值

Using a stack with a for-loop integer - need to use arbitrary values

我有一个堆栈,它向前和向后读取。我需要能够输入任意值而不是使用整数 (i) --- 我该怎么做呢?我会使用数组吗?

package stacking;
import java.util.*;


/**
 * @author Blood Fox
 * 2/11/2015
 * Stack Class - Learning how to use "Stack" Interfaces.
 *
 */
public class StackMain {

//@param args
public static void main(String[] args) {
    // Create a new, empty stack
    Stack<Integer> stack = new Stack<Integer>();
    Integer reversedStack = null;
    Integer forwardsStack = null;      

    //add some items to it
    System.out.println("This is forwards:");
    for (int i = 0; i <= 0; i++)
    {
            //stack.push ( new Integer(i) );
            forwardsStack = stack.push( new Integer(i));
            System.out.print (i + " " );

    }
    // Last in first out means reverse order - reverse and place it in reversedStack
    System.out.println("");
    System.out.println("This is backwards:");
    //do a loop for while empty --- remove 
    while ( !stack.empty() )
    {
            reversedStack = stack.pop();
            System.out.print(reversedStack);                
            System.out.print (" " );
    }

    //compare both values of the forward and backward values to match and see if it's a palindrome.
    if (forwardsStack == reversedStack)
    {
        System.out.println("");
        System.out.println("The stack is a palindrome");
    } 

    if (forwardsStack != reversedStack)
    {
        System.out.println("");
        System.out.println("The stack is NOT a palindrome");
    }
    // Empty, let's lift off!
    System.out.println("");
    System.out.println("The stack is now empty");
}

}

我正在考虑使用一个整数 startVal 和一个数组,将 forwardsStack 正确地放置在原始数字堆栈上。我该怎么做?

这里有几点值得说明:

  1. 您可以使用 Stack<Object> 允许将任何类型的 object 添加到您的堆栈中。这是因为所有 class 都是 Object.
  2. 的子class
  3. 通常使用 Object 作为 collection 的类型是个坏主意。它通常被误用,允许 collection 包含来自与 instanceof 完全不同的域的 object 和用于处理成员的转换。相反,通常最好声明一个所有成员都将实现的 interface
  4. 说到这一点,在您的情况下,您唯一需要对成员做的事情就是比较它们是否相等。 equals 方法是 Object class 的一部分,因此您将能够对 Object 成员执行您需要执行的操作。这使其成为声明 Stack<Object> 可能合适的(少数)情况之一。
  5. 最后请注意,您正在将堆栈与 == 进行比较。这不会做你想要的。它只是检查两个变量是否引用相同的 object 而它们不引用。你应该使用 forwardsStack.equals(reversedStack)。这使用 equals.
  6. 正确地比较了堆栈的大小和每个成员