какую структуру данных я должен использовать в Java для хранения повторяющихся значений? - PullRequest
0 голосов
/ 14 декабря 2010

Какая структура данных лучше всего подходит для хранения повторяющихся значений в Java? И как легко извлечь из него значения !?

спасибо РЕДАКТИРОВАТЬ # 1 Я читаю содержимое из 1000 файлов и хочу поместить содержимое каждого файла как токены в некоторую структуру данных. Я использовал Hashtable, но я не могу просмотреть много слов, когда я это делаю. Вот почему я хочу структуру данных, которая может хранить повторяющиеся значения.

Ответы [ 5 ]

2 голосов
/ 14 декабря 2010

Для простого хранения простых значений вы должны использовать реализацию интерфейса List<E>.

Чтобы получить данные из List<E>, вы можете сделать следующее:

list.get(index); // will get data at a given index
// or you can iterate over all of the items in the list
for(E item: list) {
    // use E
}

В зависимости от вашего использования ArrayList<E> или LinkedList<E> будет делать то, что вам нужно.

Другой вариант будет Map<K, V> (это реализация HashMap).Это позволит вам сохранить повторяющиеся значения под уникальными ключами.

Вы можете получить значения из Map<K,V> следующими способами:

map.get(someKey); // will retrieve the value associated with a key
// or you can iterate through all of the entries in a map like so:
for(Entry<K,V> entry: map.entrySet()){
    // use entry
}

Ответ на ваши изменения:

Возможно, вы захотитеиспользовать Map<String, List<String>>, где ключ - это имя файла, а значение - список слов в файле.

Ваш код может выглядеть следующим образом:

Map<String, List<String>> data = new HashMap<String, List<String>>();
for(File f: files) {
    List<String> words = new ArrayList<String();
    data.put(f.getName(), words);
    Scanner s = new Scanner(f);
    while(s.hasNext()) {
        words.add(s.next());
    }
}

В конце этого фрагмента data будет заполнен списками слов из каждого файла.

0 голосов
/ 14 декабря 2010

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

0 голосов
/ 14 декабря 2010

Любой java.util.Collection, который не реализует интерфейс Set. Возможно, вы захотите что-то, что реализует Список.

0 голосов
/ 14 декабря 2010

Вы должны использовать List<E>, но вы должны реализовать метод int[] getDuplicateValuesIndexes(String value) и int getCount(String value). Они будут полезны, потому что в List<E> реализациях нет ничего, чтобы обрабатывать повторяющиеся значения, поскольку они хранят только значения любого вида.

0 голосов
/ 14 декабря 2010

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

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