Как создать десять тысяч объектов и сохранить их в HashMap - PullRequest
2 голосов
/ 18 ноября 2011

Я изучаю Java, и у меня довольно простые проблемы.

Я индексирую некоторые сайты с помощью BufferedReader и сохраняю данные в базе MySQL. Я делаю это для 30 источников каждые 15 секунд, которые генерируют много данных.

Теперь я хочу проанализировать эти данные. Я думаю о сохранении данных одновременно в HashMap, который я буду очищать в конце дня, каждый день.

Но можете ли вы дать мне пример того, как создать объект для 30 различных источников? Нужно ли мне 30 различных HashMap или я могу создать ключ типа 'pathName + randomNumber'?

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

Пожалуйста, помогите. Я пытался смотреть в Интернете, но безуспешно, так как я думаю, что примеры HashMap всегда направлены на хранение объектов, а не на то, как создавать объекты, которые вы в них храните ... (да, я знаю - это вопрос новичка) ;)

Ответы [ 3 ]

2 голосов
/ 18 ноября 2011

Можно использовать Map для пути, в котором вы храните List с объектами данных. Это позволит вам получить их в том порядке, в котором вы их вставили.

Вместо List вы также можете сохранить Map s из Long (отметка времени выборки) в вашем объекте данных.

Какой будет лучший метод, зависит от того, как вы хотите использовать структуру данных.

1 голос
/ 18 ноября 2011

Джобу, я бы поступил именно так, как вы предложили. В некотором смысле вы уже ответили на свой вопрос. :) Всякий раз, когда у меня была похожая ситуация, и мне приходилось использовать карту, я использую косую черту для формирования иерархии объектов. Итак, скажем, вы хотите различать данные, которые поступают из 30 источников, как вы говорите. - Дайте этим источникам уникальное имя и сформируйте ключи карты, используя простой шаблон: "/<root>/<source id>/<data id>". Пример хранения ссылки на каком-либо сайте: mymap.put("/myproject/www.example.com/link-0121", "http://www.kernel.org");

Если по какой-то причине вы хотите получить все записи на карте с ключами, равными "/myproject/www.example.com", то я предлагаю вам перечислять объекты только на вашу карту! Вот псевдокод для этого случая:

ArrayList lst = new ArrayList();
lst.add("http://www.kernel.org");
mymap.put("/myproject/www.example.com", lst); // www.example.com has a link to www.kernel.org

Этот подход работает, только если ваши данные могут быть однозначно идентифицированы по номеру. Затем вы просто используете метод List () get, который имеет индекс в качестве параметра.

Однако, если вам нужны строковые ключи для данных, я боюсь, что вам нужно создать Map of Maps (т.е. использовать HashMap вместо ArrayList).

0 голосов
/ 18 ноября 2011

Объявите карту, которая имеет String в качестве ключа (источник) и List<String> в качестве значения (данные веб-страницы).

Map<String, List<String>> map;
...