Очередь с разными типами данных в Java - PullRequest
1 голос
/ 03 марта 2011

Я хочу реализовать очередь FIFO, содержащую различные типы данных в Java. Также мне нужно знать, могу ли я хранить массив как один из типов внутри очереди. Просто мне нужно хранить строки и массивы строк в очереди. Любая помощь ??

* 1003 спасибо *

Ответы [ 3 ]

5 голосов
/ 03 марта 2011

Помните, что массивы - это java.lang.Objects в Java.Таким образом, следующее работает нормально:

    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 голос
/ 03 марта 2011

Наличие разных типов в вашей структуре данных сделает ее более сложной и подверженной ошибкам.

В этом случае лучше иметь какую-нибудь оболочку, которая сделает все доступы к вашей работе одинаковым образом.

Постарайтесь лучше понять свой домен, чтобы увидеть вас, если у вас есть естественный класс домена для хранения значения в ключе.(Что вы хотите поместить в очередь? Сообщение, запрос, какое сообщение или запрос? И т. Д.)

В противном случае создайте неизменный класс для инкапсуляции другого типа, который может принимать ваша очередь, другогоконструктор для каждого типа, который он должен принимать.Если вы начинаете проявлять больше поведения к каждому случаю, Extract Hierarchy - ваш друг :) Таким образом, класс вашего домена может эволюционировать естественным образом.

0 голосов
/ 03 марта 2011

Как указал @Melv, вы можете просто использовать Queue из Objects.

Но использование Objects означает отказ от безопасности типов и принуждение к использованию оператора instanceof,альтернативой может быть использование Queue<String[]> вместо этого.Всякий раз, когда вам нужно вставить один String, вы можете просто вставить один элемент String массив (т.е. Queue.offer(new String[]{element})).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...