以下是一些重要Map
实现的特征差异:
LinkedHashMap
:“具有可预测的迭代顺序,通常是将键插入映射 的顺序 ( 插入顺序 )。”HashMap
:“不保证地图的顺序”TreeMap
:“根据其键的自然顺序或按Comparator
”
SortedMap
因此,LinkedHashMap
在这种情况下,您需要的就是它。
以下是说明差异的代码段;它还显示了遍历的所有条目的通用方法Map
,以及如何使用接口引用对象使实现的选择具有极大的灵活性。
import java.util.*;
public class MapExample {
public static void main(String[] args) {
populateThenDump(new HashMap<String,Integer>());
populateThenDump(new TreeMap<String,Integer>());
populateThenDump(new LinkedHashMap<String,Integer>());
}
static void populateThenDump(Map<String,Integer> map) {
System.out.println(map.getClass().getName());
map.put("Zero", 0);
map.put("One", 1);
map.put("Two", 2);
map.put("Three", 3);
map.put("Four", 4);
for (Map.Entry<String,Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + " => " + entry.getValue());
}
}
}
以上代码段的输出为(如ideone.com所示):
java.util.HashMap // unordered, results may vary
Three => 3
Zero => 0
One => 1
Four => 4
Two => 2
java.util.TreeMap // ordered by String keys lexicographically
Four => 4
One => 1
Three => 3
Two => 2
Zero => 0
java.util.LinkedHashMap // insertion order
Zero => 0
One => 1
Two => 2
Three => 3
Four => 4
Iterator
。问题内容: 以下代码以相同的插入顺序为我提供了输出。我阅读了Javadoc,他们甚至没有谈论插入顺序。有人可以帮助我获取正确的信息。 问题答案: 不,不是的。要保留插入顺序,请改用(javadoc)。 而且,现在优先于,因为它具有不必要的并发开销。(请参见HashMap和Hashtable之间的区别?。)
问题内容: 为什么某些集合数据结构不能保持插入顺序?与保持插入顺序相比,有什么特别的事情?如果不维持订单,我们会有所收获吗? 问题答案: 性能。如果您想要原始的插入顺序,则可以使用LinkedXXX类,它们在插入顺序中维护着一个附加的链表。大多数时候,您都不在乎,因此您使用HashXXX,或者想要自然订单,因此您使用TreeXXX。在这两种情况下,您为什么都要支付链接列表的额外费用?
问题内容: 我正在寻找具有键-值关联的Java类,但不使用哈希。这是我目前正在做的事情: 将值添加到中。 获取的迭代器。 遍历所有值和: 为迭代器获取一个。 根据该值创建类型的对象(自定义类)。 将类添加到。 显示面板。 这样做的问题是我无法控制获取值的顺序,因此无法按给定顺序显示值(没有对顺序进行硬编码)。 我会为此使用,但是稍后在代码中,我需要获取给定 的对象,而无法使用进行操作。 有谁知道一
LinkedHashMap将所有调用委托给其父HashMap。它还支持基于accessOrder值的访问顺序和插入顺序。如果accessOrder:true,则使用访问顺序,否则使用accessOrder:false插入顺序 公共LinkedHashMap(int初始容量、浮点加载因子、布尔访问顺序) 但LinkedHashMap如何在内部支持对象的访问顺序和插入顺序呢?
问题内容: 以下SQL查询: 返回: 要添加一次,只需添加一次即可: 但是,结果值改变了顺序: 可能是什么原因呢? 我如何保留订单? 问题答案: 该关键字是做什么它应该做的事情,回报每一个行与给定的列值。不同不允许您指定 哪些 这样的行会被退回,这是从原来的查询,这样的排序是允许清楚(存在一个跟随ID为429的行ID为443行)。 要控制将返回哪些行,您需要重新构造查询。我将采用的典型解决方案是使
问题内容: 使用SELECT WHERE IN()时,是否可以保持顺序?例如,使用以下查询: 结果将使用ID的默认顺序返回。1,7,54,55,56 当我想保留IN中使用的顺序时:56,55,54,1,7 有没有一种快速的方法可以在MySQL中执行此操作,或者我将被迫在代码后对其进行排序? 问题答案: 使用FIND_IN_SET: