Java 从HashMap获取第一个和最后一个元素
我有以下代码,我希望能够从映射中获取第一个和最后一个元素,并将每个元素分配给一个字符串Java 从HashMap获取第一个和最后一个元素,java,hashmap,Java,Hashmap,我有以下代码,我希望能够从映射中获取第一个和最后一个元素,并将每个元素分配给一个字符串 String result1stElement = null; String resultLastElement = null; Map<String, String> result = new HashMap<String, String>(); result = myModel.getSampleResults(); 字符串result1stElement=null; 字符串r
String result1stElement = null;
String resultLastElement = null;
Map<String, String> result = new HashMap<String, String>();
result = myModel.getSampleResults();
字符串result1stElement=null;
字符串resultLastElement=null;
映射结果=新的HashMap();
结果=myModel.getSampleResults();
任何想法
提前感谢。首先,地图没有顺序,所以你不会真正拥有第一个和最后一个元素 但是,如果您希望以任何方式获取该元素的第一个和最后一个元素,您可以只获取值并将其转换为数组。这不是很漂亮,但会有用的
Map<String, String> result = new HashMap<String, String>();
result = myModel.getSampleResults();
map.values().toArray()[0]; //First result
map.values().toArray()[result.size()-1]; //Last result
Map result=newhashmap();
结果=myModel.getSampleResults();
map.values().toArray()[0]//第一个结果
map.values().toArray()[result.size()-1]//最后结果
注意:这不是用编译器测试的。首先,映射没有顺序,因此您不会真正拥有第一个和最后一个元素 但是,如果您希望以任何方式获取该元素的第一个和最后一个元素,您可以只获取值并将其转换为数组。这不是很漂亮,但会有用的
Map<String, String> result = new HashMap<String, String>();
result = myModel.getSampleResults();
map.values().toArray()[0]; //First result
map.values().toArray()[result.size()-1]; //Last result
Map result=newhashmap();
结果=myModel.getSampleResults();
map.values().toArray()[0]//第一个结果
map.values().toArray()[result.size()-1]//最后结果
注意:这不是用编译器测试的。第一个和最后一个元素概念不适用于HashMap和HashSet等基于哈希的结构。 插入或删除键可能会导致元素动态重新排序 我猜您的模型结果是一个键值对列表,而不是哈希映射。在这种情况下,元素顺序已就位
LinkedHashMap
保持元素的插入顺序
将
HashMap
替换为LinkedHashMap
(并修改.getSampleResults()
)以返回LinkedHashMap并检查此问题以了解更多详细信息。第一个和最后一个元素概念不适用于HashMap和HashSet等基于哈希的结构。
插入或删除键可能会导致元素动态重新排序
我猜您的模型结果是一个键值对列表,而不是哈希映射。在这种情况下,元素顺序已就位LinkedHashMap
保持元素的插入顺序
将
HashMap
替换为LinkedHashMap
(并修改.getSampleResults()
)以返回LinkedHashMap并检查此问题以了解更多详细信息。HashMap中没有第一个和最后一个元素。这是O(1)查找所要付出的代价:在内部,实现将把条目以不易识别(但确定)的顺序放入桶列表中。这个过程将散列
放入散列映射
,实际上越混乱,性能越好
如果希望贴图按其键的自然顺序排序(或自定义比较器),则可以使用TreeMap
;如果希望元素按插入顺序排列,则可以使用LinkedHashMap
附言:即使你选择了一个维护某种顺序的
Map
实现,调用toArray()
仅仅是为了获取第一个和最后一个元素也是一个巨大的滥杀,我也不会这么做TreeMap
具有firstEntry()
和lastEntry()
方法,甚至使用LinkedHashMap
,手动遍历元素并保留第一个和最后一个元素,而不是分配一个潜在的巨大数组,成本要低得多。HashMap中没有第一个和最后一个元素这样的东西。这是O(1)查找所要付出的代价:在内部,实现将把条目以不易识别(但确定)的顺序放入桶列表中。这个过程将散列
放入散列映射
,实际上越混乱,性能越好
如果希望贴图按其键的自然顺序排序(或自定义比较器),则可以使用TreeMap
;如果希望元素按插入顺序排列,则可以使用LinkedHashMap
附言:即使你选择了一个维护某种顺序的
Map
实现,调用toArray()
仅仅是为了获取第一个和最后一个元素也是一个巨大的滥杀,我也不会这么做TreeMap
有firstEntry()
和lastEntry()
方法,即使使用LinkedHashMap
,手动遍历元素并保留第一个和最后一个元素也要便宜得多,而不是分配一个潜在的巨大数组。您必须使用
LinkedHashMap
。看看entrySet()方法,这个HashMap没有顺序。从HashMap:
此类不保证地图的顺序;在里面
特别是,它不能保证订单保持不变
随着时间的推移
您必须使用LinkedHashMap
。看看entrySet()方法,可以使用Set接口的这个方法
但是迭代条目集中的条目并获得第一个和最后一个条目是一种更好的方法
以下示例可能会有所帮助:
public static void main(final String[] args) {
final Map<Integer,String> orderMap = new LinkedHashMap<Integer,String>();
orderMap.put(6, "Six");
orderMap.put(7, "Seven");
orderMap.put(3, "Three");
orderMap.put(100, "Hundered");
orderMap.put(10, "Ten");
final Set<Entry<Integer, String>> mapValues = orderMap.entrySet();
final int maplength = mapValues.size();
final Entry<Integer,String>[] test = new Entry[maplength];
mapValues.toArray(test);
System.out.print("First Key:"+test[0].getKey());
System.out.println(" First Value:"+test[0].getValue());
System.out.print("Last Key:"+test[maplength-1].getKey());
System.out.println(" Last Value:"+test[maplength-1].getValue());
}
// the output geneated is :
First Key:6 First Value:Six
Last Key:10 Last Value:Ten
publicstaticvoidmain(最终字符串[]args){
final Map orderMap=新建LinkedHashMap();
orderMap.put(6,“6”);
orderMap.put(7,“七”);
orderMap.put(3,“三”);
orderMap.put(100,“Hundered”);
orderMap.put(10,“10”);
最终设置mapValues=orderMap.entrySet();
final int mapleLength=mapValues.size();
最终条目[]测试=新条目[最大长度];
mapValues.toArray(测试);
System.out.pr