【发布时间】:2014-05-25 20:31:52
【问题描述】:
我正在使用 JSoup 从一个提供花粉数据的网站上抓取一些数据。他们没有 API 访问权限,所以抓取是我最后的手段。
使用HashMap,我存储date 和pollenIndex,这是当天花粉水平在0.0 - 10.0 范围内的水平。
private static Map<String, String> pollenMap = new HashMap<String, String>();
这是我的Pollen 类的构造函数的一部分。
for(int i = 0; i < 4; i++)
{
Element dates = doc.select("td.text-center.even-four").get(i);
Element levels = doc.select("td.levels").get(i);
System.out.println(dates.text() + ", " + levels.text());
pollenMap.put(dates.text(), levels.text());
}
一个问题是HashMap 为我排序数据。 pollenMap 的输出是这样的:
: [Monday May 26, 2014, Wednesday May 28, 2014, Sunday May 25, 2014, Tuesday May 27, 2014]
: [7.90, 6.60, 7.60, 8.80]
如您所见,HashMap 对我的 dates 键进行排序,导致 Monday 排在第一位,Tuesday 排在最后。
我可能错误地使用了HashMap,所以我的朋友建议我使用TreeMap,然而,结果是这样的:
: [Monday May 26, 2014, Wednesday May 28, 2014, Sunday May 25, 2014, Tuesday May 27, 2014]
: [7.90, 6.60, 7.60, 8.80]
如何在不排序的情况下使用这个键值结构?
对于这个数据结构的新手问题,我们深表歉意。我可以使用两个String 列表,但我想学习这些新的数据结构。
【问题讨论】:
-
哦,对不起。这是否意味着我错误地使用了
HashMap? -
顺序变了是不是有问题?或者它只是让你感到惊讶?通常,当您需要键值映射时,键值对的顺序并不重要。
-
TreeMap上的迭代顺序取决于用作键的对象的类型。您还可以提供自定义Comparator来影响订单。我的猜测是,您的问题源于您用作键的字符串的格式以及缺乏能够按照您想要的方式比较它们的合理函数。您最好将字符串解析为日期并使用日期作为键。 -
在问这样一个微不足道的问题之前,值得先阅读 Java 文档并检查有关正在使用的数据结构的基本信息。 -1
-
@OlegS。在我看来,这与数据结构无关,而是用作输入的错误数据类型。我使用了
String,但正确的方法是Date。我现在使用Date而不是String。
标签: java data-structures hashmap treemap