Чтобы целое число указывало на 3 упорядоченных списка в Java - PullRequest
2 голосов
/ 08 марта 2010

Какую структуру данных вы бы использовали вместо X, чтобы иметь эффективные слияния, сортировки и добавления, как описано ниже?

# 1 Возможное решение: одна HashMap to X -datastructure

Хорошим решением может быть HashMap, указывающий от fileID на некоторую структуру данных, связывающую word, wordCount и wordID.Однако я не нашел способа его реализовать.


Мне не разрешено использовать Postgres или любой другой подобный инструмент для нейтрализации моих данных.Я хочу иметь эффективные слияния, сортировки и добавления в соответствии с fileID, wordID или wordCount для типа ниже.


У меня есть тип Wordsполе с полем fileID, которое указывает на список слов и соответствующие фрагменты информации:

Тип

class Words
===================================
fileID: int 
[list of words] : ArrayList
[list of wordCounts] : ArrayList
[list of wordIDs] : ArrayList

Примерданные в

fileID   word   wordCount   wordID
      instance1 of words
1        He     123         1111
1        llo    321         2
      instance2 of words
2        Van    213         666
2        cou    777         932

Пример необходимого слияния

fileID     wordID                 fileID     wordID
1          2
1          3           wordID=2
2          2           ========>  1          2
2          3                      2          2 

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

Наличие примерно трех HashMaps затрудняет сортировку:

  1. от word до wordID в данном fileID
  2. от wordID до fileID
  3. от wordID до wordCount в данном fileID

1 Ответ

3 голосов
/ 08 марта 2010

Почему вы не используете класс для хранения слова, количества слов и идентификатора слова вместе? Тогда вам понадобится один список для каждого fileID. Это, по крайней мере, упростит ИМО.

class Word {
    private String text;
    private long count;
    private long id;
    // getters, setters
}

class Words {
    private int fileID;
    private List<Word> words;
    // getters, setters
}

Это будет скелет, который уже автоматически разрешает ваше отображение 3. Затем вы можете добавить необходимые дополнительные сопоставления в Words и / или Word.

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

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