-
繁星coding
博士进行一个LinkedHashMap, 并调用 来包装Collections.umodifiableMap,如不可修改的视图集合中所讨论的。Map.of不可修改的静态工厂映射Javadoc 中清楚地记录了方法Map所使用的实现。Map.of其中一个要点明确表明键未排序:不可修改的地图…映射的迭代顺序未指定,并且可能会发生变化。…因此,如果需要排序,您必须使用另一种实现Map。SortedMap“保留顺序”是指排序顺序吗?Java 包含SortedMap用于定义Map实现的行为的接口,这些实现维护所有键的总排序。Java 捆绑了两种这样的实现:TreeMap和ConcurrentSkipListMap。保留原始插入顺序您的问题不清楚,但我猜您所说的“保留顺序”的意思是您希望按照添加到地图的顺序维护密钥。引用Javadoc:…可预测的迭代顺序…...维护一个贯穿其所有条目的双向链表。该链表定义了迭代顺序,通常是将键插入到映射中的顺序(插入顺序)。请注意,如果将键重新插入到映射中,插入顺序不会受到影响。不可修改的地图满足LinkedHashMap您对原始插入顺序的需求,但不能满足您对不可修改的需求。为此,请使用该类Collections及其实用方法unmodifiableMap。Map< String , String > map = new LinkedHashMap<>() ;map.put( "this" , "that" ) ;map.put( "other" , "thing" ) ;Map< String , String > unmodMap = Collections.unmodifiableMap( map ) ;请务必研究有关不可修改视图集合的文档以了解它们的行为。单击可缩放。下表概述了Map与 Java 11 捆绑的所有实现。
-
慕运维8079593
我相信您正在寻找的是LinkedHashMap。链接 Hashmap 与保留插入顺序的常规 HashMap 类似。
-
呼啦一阵风
以下内容不保留顺序:Map.of("a", 1, "b", 2); 如果你想要一个不可变的ordered Map,那么你必须采取这种迂回的方式:var map = new LinkedHashMap<String, String>();map.put("a", 1);map.put("b", 2);map = Collections.unmodifiableMap(map);不是很理想,因为您必须创建两个映射,一个用于排序,另一个用于不可变。
-
慕后森
如果 Google Guava 已存在于您的项目中,那么 ImmutableMap将满足您的需求。不变性(不是不可修改的视图)和迭代顺序 = 创建顺序