Реализация хеш-таблицы для группы вопросов / ответов - PullRequest
4 голосов
/ 15 августа 2010

Какой самый простой способ реализовать хеш-таблицу (или использовать лучший способ) для хранения списка вопросов и связанных с ними ответов (1 возможный ответ на вопрос)?

Изначально я создал ArrayList для хранениявопросы.Я мог бы создать второй ArrayList для ответов, но как только у меня возникнет много вопросов, попытка сопоставить вопросы и ответы усложняется.

Может кто-нибудь опубликовать быстрый пример кода?Спасибо!

Ответы [ 4 ]

4 голосов
/ 15 августа 2010

Что бы вы хотели, чтобы был ключ?Если на один вопрос возможен только один ответ, и в некоторых случаях может быть , а не , это звучит как идеальная причина иметь ссылку Answer в классе Question.Тогда просто составьте список вопросов.

Если это не не соответствует какому-либо конкретному требованию, пожалуйста, дайте больше информации о том, что вы пытаетесь сделать.(Например, вам может потребоваться перейти от ответа на вопрос ... в этом случае вы могли бы получить ссылку из ответа на вопрос в объекте ... это немного грязно вв терминах циклических ссылок, и не поддается неизменным типам, но это не было бы совершенно необоснованно.)

Одна из причин, по которой вы предпочитаете иметь список вопросов на простой карте, состоит в том, что вопросы как правило, как-то упорядочено естественным образом, тогда как карты обычно неупорядочены.Но нам нужно знать больше о вашем фактическом контексте, чтобы точно сказать, было ли это актуально.

1 голос
/ 15 августа 2010

HashMap - идеальный выбор, но я бы порекомендовал вам пойти еще дальше.

Java - объектно-ориентированный язык. Почему бы не создать анкету абстракции?

public class Questionnaire
{
    private Map<String, String> questionsAndAnswers = new HashMap<String, String>();

    // more follows.

}
0 голосов
/ 15 августа 2010

Ваше основное требование удовлетворяется любым классом, который реализует интерфейс Map (java.util.Map).

Однако при выборе реализации необходимо учитыватькакие операции вы хотите оптимизировать: { Вставить , Удалить , Произвольный доступ , Последовательный доступ }

Есливам требуется только произвольный доступ к каждому вопросу (и ответу), тогда HashMap, вероятно, является вашей лучшей ставкой.

Наиболее распространенный вариант использования словаря, такого как приложение, - перечисление сериизаписей.Таким образом, если вы собираетесь отображать серию вопросов (и ответов), рассмотрите вариант использования HashMap, LinkedHashMap.

Ваша основная функциональность хэш-таблицы обеспечивается HashMap, и это приведет к O (1) сложности для поиска, однако итерация, необходимая для отображения «серий» или «списков», может быть дорогой.

В этом случае LinkedHashMap будет лучше всего отвечать вашим потребностям, поскольку предоставляет связанный список, привязанный к базовой хэш-таблице;поэтому итерация или последовательный доступ становится недорогим .Однако компромисс этого заключается в том, что это делает добавление и удаление новых записей (вопросов) более дорогостоящими.

0 голосов
/ 15 августа 2010

Для этого простого отображения 1: 1 вам не обязательно нужен сложный HashMap. Достаточно простого класса, состоящего из вопроса и связанного с ним ответа:

public class Question {
   final private String text;
   final private String answer;
   public Question(String text, String answer) {
     this.text= text;
     this.answer = answer;
   }

   public String getText() { return text; }
   public String getAnswer() { return answer; }
   public String toString() { return text + " - " + answer; }
}

Затем, позже в своем коде, вы можете создать список, содержащий все вопросы:

   List<Question> questionnaire = new ArrayList<Question>();
   questionnaire.add(new Question("1+1?", "2"));
   System.out.println("Question 1: " + questionnaire.get(0).getText());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...