我使用了LinkedHashMap
,因为在该映射表中,键的输入顺序很重要。
但现在,我想得到第一个(最先输入的)或最后一个键的值。
是否需要像first()
和last()
这样的方法?
我是否需要一个迭代器来获取第一个键入口?这就是我使用LinkedHashMap
的原因!
谢谢!
我使用了LinkedHashMap
,因为在该映射表中,键的输入顺序很重要。
但现在,我想得到第一个(最先输入的)或最后一个键的值。
是否需要像first()
和last()
这样的方法?
我是否需要一个迭代器来获取第一个键入口?这就是我使用LinkedHashMap
的原因!
谢谢!
对于第一个元素,使用entrySet().iterator().next()
,并在迭代一次后停止迭代。
对于最后一个元素,最简单的方法是在每次map.put时将键保存在变量中。
Map<Integer,String> orderMap = new LinkedHashMap<Integer,String>();
Set<Integer> al = orderMap.keySet();
现在在 al
对象上使用迭代器,您可以获取任何对象。
import java.util.Arrays;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class Scratch {
public static void main(String[] args) {
// Plain java version
Map<String, List<Integer>> linked = new LinkedHashMap<>();
linked.put("a", Arrays.asList(1, 2, 3));
linked.put("aa", Arrays.asList(1, 2, 3, 4));
linked.put("b", Arrays.asList(1, 2, 3, 4, 5));
linked.put("bb", Arrays.asList(1, 2, 3, 4, 5, 6));
System.out.println("linked = " + linked);
String firstKey = getFirstKey(linked);
System.out.println("firstKey = " + firstKey);
List<Integer> firstEntry = linked.get(firstKey);
System.out.println("firstEntry = " + firstEntry);
String lastKey = getLastKey(linked);
System.out.println("lastKey = " + lastKey);
List<Integer> lastEntry = linked.get(lastKey);
System.out.println("lastEntry = " + lastEntry);
}
private static String getLastKey(Map<String, List<Integer>> linked) {
int index = 0;
for (String key : linked.keySet()) {
index++;
if (index == linked.size()) {
return key;
}
}
return null;
}
private static String getFirstKey(Map<String, List<Integer>> linked) {
for (String key : linked.keySet()) {
return key;
}
return null;
}
}
是的,我遇到了同样的问题,但幸运的是我只需要第一个元素……这是我为此所做的。
private String getDefaultPlayerType()
{
String defaultPlayerType = "";
for(LinkedHashMap.Entry<String,Integer> entry : getLeagueByName(currentLeague).getStatisticsOrder().entrySet())
{
defaultPlayerType = entry.getKey();
break;
}
return defaultPlayerType;
}
没错,你必须手动枚举键集直到链表的末尾,然后通过键检索条目并返回该条目。
public static List<Fragment> pullToBackStack() {
List<Fragment> fragments = new ArrayList<>();
List<Map.Entry<String, Fragment>> entryList = new ArrayList<>(backMap.entrySet());
int size = entryList.size();
if (size > 0) {
for (int i = size - 1; i >= 0; i--) {// last Fragments
fragments.add(entryList.get(i).getValue());
backMap.remove(entryList.get(i).getKey());
}
return fragments;
}
return null;
}
LinkedHashMap
没有实现Deque
。它完全可以这样做。 - forresthopkinsa