java中具有不同数据类型的队列

时间:2011-03-03 04:48:08

标签: java data-structures

我想在java中实现包含不同数据类型的FIFO队列。另外,我需要知道是否可以将数组存储为队列中的一种类型。我只需要将Strings和String数组存储在队列中。任何帮助??

感谢名单

3 个答案:

答案 0 :(得分:5)

请记住,数组是Java中的java.lang.Objects。所以以下工作正常:

    Queue<Object> queue = new LinkedList<Object> ();
    queue.add("string0");
    queue.add(new String[] {"string1", "string2"});

请记住,虽然迭代此集合可能需要使用instanceof。您可能更好地创建所有条目字符串数组,并且只创建大小为1的单个字符串数组。这样,您的迭代逻辑变得更容易。

    Queue<String[]> queue = new LinkedList<String[]> ();
    queue.add(new String[] {"string0"});
    queue.add(new String[] {"string1", "string2"});
    for (String[] nextArray : queue) {
        for (String nextString : nextArray) {
            System.out.println("nextElement: " + nextString);
        }
    }

答案 1 :(得分:1)

在数据结构中使用不同类型会使用起来更加困难且容易出错。

在这种情况下,最好有一些包装器以相同的方式对您的工作进行所有访问。

如果您有一个自然域类来保存密钥中的值,请尝试更好地了解您的域名。 (你想把什么放在队列里?一条消息,一条请求,一条什么样的消息或请求?等等)

否则创建一个不可变类来封装Queue可以接受的不同类型,它应该接受的每个类型都有不同的构造函数。如果你开始对每个案例都有更多的行为Extract Hierarchy是你的朋友:)这样你的域类就可以以自然的方式发展。

答案 2 :(得分:0)

正如@Melv指出的那样,您只需使用Queue的{​​{1}}。

但是使用Objects意味着放弃类型安全并被迫使用Objects运算符。替代方案可以是使用instanceof代替。每当您需要插入一个Queue<String[]>时,您只需推送一个元素String数组(即String)。