Я работаю с TreeMap строк TreeMap<String, String>
и использую его для реализации Dictionay слов.
Затем я имею коллекцию файлов и хотел бы создать представление каждого файла в векторном пространстве (пространстве слов), определяемом словарем.
Каждый файл должен иметь вектор, представляющий его со следующими свойствами:
- вектор должен иметь тот же размер, что и словарь
- для каждого слова , содержащегося в файле, вектор должен иметь 1 в позиции, соответствующей позиции слова в словаре
- для каждого слова не содержащегося в файле вектор должен иметь -1 в позиции, соответствующей позиции слова в словаре
Итак, моя идея - использовать Vector<Boolean>
для реализации этих векторов. (Этот способ представления документов в коллекции называется Boolean Model - http://www.site.uottawa.ca/~diana/csi4107/L3.pdf)
Проблема, с которой я сталкиваюсь в процедуре создания этого вектора, заключается в том, что мне нужен способ найти положение слова в словаре, что-то вроде этого:
String key;
int i = get_position_of_key_in_Treemap(key); <--- purely invented method...
1) Есть ли какой-либо метод, подобный этому, который я могу использовать на TreeMap? Если бы вы не могли предоставить какой-то код, чтобы помочь мне реализовать его самостоятельно?
2) Есть ли итератор на TreeMap (он по алфавиту упорядочен по клавишам), из которого я могу получить позицию?
3) В конце концов мне следует использовать другой класс для реализации словаря? (Если вы думаете, что с TreeMaps я не могу делать то, что мне нужно) Если да, то какой?
Спасибо заранее.
ДОБАВЛЕННАЯ ЧАСТЬ:
Решение, предлагаемое dasblinkenlight, выглядит прекрасно, но проблема сложности (линейная с размерностью словаря из-за копирования ключей в массив), и идея сделать это для каждого файла неприемлема.
Любые другие идеи для моих вопросов?