我是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);
但我不知道如何使用索引查找值。 (我知道如何使用密钥获取值,但在这种情况下我应该出于某种原因使用索引)
答案 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