我想在java中实现包含不同数据类型的FIFO队列。另外,我需要知道是否可以将数组存储为队列中的一种类型。我只需要将Strings和String数组存储在队列中。任何帮助??
感谢名单
答案 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
)。