我正在学习Java并且有一个非常基本的问题。
我使用BufferedReader索引某些站点并将数据存储在MySQL库中。我每隔15秒就会对30个源进行此操作,这会产生大量数据。
现在我想分析这些数据。我正在考虑将数据同时存储在HashMap
中,我将在每天结束时每天清除。
但是,您能举例说明如何为30种不同来源创建对象吗?
我需要30个不同的HashMap
,还是可以构建像'pathName + randomNumber'这样的密钥?
最后,我希望能够在HashMap中找到每个源的第一个条目以及两个最新的条目,从而使我能够看到这三个条目之间的区别。
请帮忙。我试图在网上看,但没有运气,因为我认为HashMap示例总是专注于存储对象,而不是如何创建存储在其中的对象...(是的,我知道 - 这是一个菜鸟问题) ;)
答案 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;