Это правильный вариант использования hashmap - PullRequest
0 голосов
/ 26 октября 2011

Итак, у меня есть файл произвольной длины со следующим форматом:

@HEADER1
//arbitrary lines of data
@HEADER2
//arbitrary lines of data 
....

Я извлеку каждый заголовок и сохраню его в Hashmap, а затем начну (последовательно) анализировать другой файл, который является надмножеством file1, например. имеет следующий формат:

@HEADER1
//arbitrary lines of data
//extended information
@HEADER2
//arbitrary lines of data
//extended information

Итак, моя идея состоит в том, что я создам хэш-карту заголовков - один раз пройдя по файлу 1, а затем перейду к файлу 2, и на каждом заголовке в нем я проверю, есть ли он в hasmap, если да - я буду сделать что-то с данными. Поэтому мне было интересно, является ли это оптимальным решением - в соответствии с моими закулисными вычислениями это будет O (n), тогда как, если бы у меня был массив и для каждого заголовка в файле 2, проверялось ли оно также в Arraylist будет иметь выход O (n ^ 2), тогда как N - количество заголовков в Arraylist - я прав?

Если есть еще более эффективный способ, я был бы рад возглавить его.

РЕДАКТИРОВАТЬ:

Я не могу гарантировать, что порядок заголовков будет таким же, только то, что в файле1 должно существовать в файле2. Кроме того - мне не нужно ничего сохранять для ЗНАЧЕНИЯ, в этом случае мне просто нужен быстрый доступ к ключу.

Ответы [ 4 ]

1 голос
/ 26 октября 2011

HashMap - отличный выбор здесь.

Итак, следующая вещь, о которой стоит подумать, - это то, что будет хранить этот HashMap. Ключ, вероятно, может быть строкой и будет "@HEADER###". Но как насчет данных?

У вас есть несколько вариантов значения в HashMap. Вы можете использовать String, но потратьте некоторое время и продумайте свои данные. Это оригинальные строки данных и расширенная информация, которую вы добавляете? Эти данные представляют собой что-то структурированное? Нравится список предметов?

Если вы обнаружите, что получаете String-значение с карты и выполняете дополнительную обработку, подумайте о замене этой String классом, который лучше представляет ваши данные, чтобы у вас было что-то вроде HashMap<String, DoskiasData>.

0 голосов
/ 26 октября 2011

Зависит от того, что круговая очередь также может работать, если формат файлов может быть гарантирован. Вам необходимо создать объект, состоящий из строк X и заголовка.

0 голосов
/ 26 октября 2011

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

0 голосов
/ 26 октября 2011

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

...