Map Logic帮助 - Java

时间:2014-08-18 09:07:40

标签: java

package com.blackdeveraux.lunchroulette.places;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

@SuppressWarnings("serial")
public class SearchData extends HashMap<String, Object>{
    public static final String BASE_URL =
          "https://maps.googleapis.com/maps/api/place/nearbysearch/json";

    @SuppressWarnings("unchecked")
    public List<Place> buildPlaces() {
        LinkedList<Place> places = new LinkedList<Place>();

        List<Map<String, Object>> results = (List<Map<String, Object>>)get("results");

        for(Map<String, Object> data : results){
            Place place = new Place();
            try {
                place.setName((String) data.get("name"));
                place.setReference((String) data.get("reference"));
                Map<String, Object> geometry = (Map<String, Object>)data.get("geometry");
                Map<String, BigDecimal> location = (Map<String, BigDecimal>)geometry.get("location");

                place.setLatitude(location.get("lat").doubleValue());
                place.setLongitude(location.get("lng").doubleValue());

                places.add(place);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return places;
    }
}

需要帮助理解所有Map和List逻辑,看起来有点复杂,也许不是,但我在查看代码的工作方式时遇到了麻烦。可以找到原始作者的代码here

2 个答案:

答案 0 :(得分:0)

请你检查一下:When to use HashMap over LinkedList or ArrayList and vice-versa

列表表示元素的顺序排序。 地图用于表示键/值对的集合。

虽然您可以将地图用作列表,但这样做有一些明确的缺点。

维护订单: - 按订单定义列表。您添加项目,然后您可以按插入项目的顺序遍历列表。当您向HashMap添加项目时,不能保证按照您放入它们的顺序检索项目.HotMap的子类如LinkedHashMap将维护顺序,但通常顺序不能保证使用Map。 / p>

键/值语义: - 地图的目的是根据可用于稍后检索项目的键来存储项目。只有在密钥恰好是列表中的位置的有限情况下才能使用列表来实现类似的功能。

如果您询问代码的逻辑,它会遍历地图 列表 和商店将名称的放入Place POJO的字段名称中。 引用也是如此。地图具有作为合作伙伴的关键和价值,例如 地图 ,这对某个关键字有价值。 地方 将是添加到名为places的LinkedList中。

答案 1 :(得分:0)

这是我对评论的回复。它不能把它作为回复,因为它只受限于一些字符,所以我必须将其作为另一个答案发布。

您的地图有一个String键和Object作为它的值。所以当你得到键的几何形状&#34;几何&#34;它得到一个对象。 Map仍然是java中的一个对象。 通过代码,我可以得到Map of Map的结构。

Each Map has the following :
"name" as key : "value of name" as String
"reference" as key: "value reference" as String
"geometry" as key: "value of geometry" as Map<String, Object>

This means, you have a map inside a map. So geometry is a map inside the map data.
 And still, geometry has another map which is location.
 ("location" as key : "value of location" which is a map<String, BigDecimal>).

And finally, location map is like this:
"lat" as key : "lat value" as BigDecimal
"lng"  as key: "lng value" as BigDecimal

所以基本上它是地图内地图内的地图。