如何使用索引获取linkedhashmap值?

时间:2016-01-09 20:48:15

标签: java android

我是java的新手..我已经创建了一个链接的hashmap,如:

Map<String, Double> MonthlyCPIMenu = new LinkedHashMap<String, Double>();
        MonthlyCPIMenu.put("1394/10", 0.0);
        MonthlyCPIMenu.put("1394/09", 231.6);
        MonthlyCPIMenu.put("1394/08", 228.7);
        MonthlyCPIMenu.put("1394/07", 227.0);
        MonthlyCPIMenu.put("1394/06", 225.7);

我知道如何使用(例如)找到每个项目的索引:

String duemonth="1394/08";
            int indexduemonth = new ArrayList<String>(MonthlyCPIMenu.keySet()).indexOf(duemonth);

但我不知道如何使用索引查找值。 (我知道如何使用密钥获取值,但在这种情况下我应该出于某种原因使用索引)

3 个答案:

答案 0 :(得分:2)

粗略的做法是

new ArrayList<String>(MonthlyCPIMenu.keySet()).get(index);

LinkedHashMap通常不支持有效的索引检索,并且它不提供任何API用于此目的。最好的算法就是取MonthlyCPIMenu.keySet().iterator(),调用next() index次,然后返回一个最终next()的结果:

<K, V> K getKey(LinkedHashMap<K, V> map, int index) {
    Iterator<K> itr = map.keySet().iterator();
    for (int i = 0; i < index; i++) {
        itr.next();
    }
    return itr.next();
}

答案 1 :(得分:0)

首先,您是否有使用LinkedHashMap的具体原因?一般来说,迭代密钥是便宜的,查找是0(1)。为什么值的顺序很重要?

您可以使用get(key)方法从地图中检索值。

Map.get(key);

您可以使用以下方法防止空值

Map.get(key) != null ? Map.get(key) : "";

如果找到键,则返回值,否则返回空字符串。你可以用你想要的任何东西替换空字符串。

答案 2 :(得分:0)

如果设置为获取值,则使用List接口并创建自己的类型

public class MyValue {
String date;
String value;

public MyValue(String d, String v) {
    this.date = d;
    this.value = v;
}

public String getDate() {
    return date;
}

public String getValue() {
    return value;
}

}

然后使用List接口:

List<MyValue> list = new ArrayList<>();
// put all you values in the list
// get the values out by index in the list