Java 8中有序Map的最优使用方法及对应Dart结构的变量声明
Java 8相关问题解答
1 有序Map的最优使用方式
- 插入顺序有序场景:优先用
LinkedHashMap,Java 8中该实现性能优异,默认维持键的插入顺序,若需访问顺序(比如LRU缓存场景),可在构造时传入accessOrder = true参数,同时支持Java 8新增的forEach、computeIfAbsent等函数式方法,适配流式操作需求。 - 键排序有序场景:优先用
TreeMap,基于红黑树实现,默认按照键的自然排序规则排列,也可通过构造方法传入自定义Comparator实现自定义排序逻辑,注意键类型需实现Comparable接口,否则需显式传入比较器避免运行时异常。 - 不可变有序场景:Java 8无内置不可变有序Map工厂,可通过
Collections.unmodifiableMap包装上述有序Map实现不可变效果。
2 对应Dart代码的Java 8最优声明
Dart示例中的const Map是编译期常量、不可修改且默认维持插入顺序,Java 8中对应最优声明如下:
import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; public class DataContainer { // 对应Dart const常量特性,声明为static final不可重新赋值 private static final Map<Integer, Map<String, String>> DATA; static { Map<Integer, Map<String, String>> tempOuter = new LinkedHashMap<>(); // 填充第一条数据 Map<String, String> johnInfo = new LinkedHashMap<>(); johnInfo.put("name", "John"); johnInfo.put("age", "20"); tempOuter.put(1, Collections.unmodifiableMap(johnInfo)); // 填充第二条数据 Map<String, String> maryInfo = new LinkedHashMap<>(); maryInfo.put("name", "Mary"); maryInfo.put("age", "30"); tempOuter.put(2, Collections.unmodifiableMap(maryInfo)); // 外层Map也包装为不可变,完全匹配const不可修改的特性 DATA = Collections.unmodifiableMap(tempOuter); } }
如果不需要严格不可变,仅需普通可变变量,可直接初始化LinkedHashMap后调用put方法填充内容即可。
内容的提问来源于stack exchange,提问作者Fabio Cipolatti
相关产品推荐
相关产品推荐

