如何创建一万个对象并将它们存储在HashMap中

时间:2011-11-18 08:42:30

标签: java object map hashmap

我正在学习Java并且有一个非常基本的问题。

我使用BufferedReader索引某些站点并将数据存储在MySQL库中。我每隔15秒就会对30个源进行此操作,这会产生大量数据。

现在我想分析这些数据。我正在考虑将数据同时存储在HashMap中,我将在每天结束时每天清除。

但是,您能举例说明如何为30种不同来源创建对象吗? 我需要30个不同的HashMap,还是可以构建像'pathName + randomNumber'这样的密钥?

最后,我希望能够在HashMap中找到每个源的第一个条目以及两个最新的条目,从而使我能够看到这三个条目之间的区别。

请帮忙。我试图在网上看,但没有运气,因为我认为HashMap示例总是专注于存储对象,而不是如何创建存储在其中的对象...(是的,我知道 - 这是一个菜鸟问题) ;)

3 个答案:

答案 0 :(得分:2)

一种可能性是在路径名上使用Map,在其中存储包含数据对象的List。这将允许您按插入顺序检索它们。

您可以将List从Long(获取的时间戳)存储到数据对象,而不是Map

最好的方法取决于您希望如何使用数据结构。

答案 1 :(得分:1)

Jobu,我会像你提议的那样做。所以在某种意义上你已经回答了你的问题。 :)每当我遇到类似的情况,并且不得不使用Map时,我使用正斜杠来形成对象的层次结构。所以,如你所说,你想要区分来自30个来源的数据。 - 为这些来源提供一个唯一的名称,并使用这个简单的模式形成您的地图密钥:“/<root>/<source id>/<data id>”。在某些网站上存储链接的示例:mymap.put("/myproject/www.example.com/link-0121", "http://www.kernel.org");

如果出于某种原因想要获得所有具有等于“/myproject/www.example.com”的键的Map条目,那么我建议您仅将对象列出到地图中!这是一个伪代码:

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)。

答案 2 :(得分:0)

声明将String作为(来源)并将List<String>作为其(网页数据)的地图。

Map<String, List<String>> map;