我有一个方法,用于将对象的映射转换为人类可读的键值对。为此,我需要一些字符,如引号,空格和反斜杠,默认情况下将被解释为控制字符,如果在键或值中使用,则需要转义。由于不会有任何重复,我需要快速查找,我假设一个集合是最好的选择,但是(对我的知识)你不能锁定一个集合,它可能会被意外更改。
将HashSet作为常量是否是个好主意,是否有一种方法可以使它成为不可变的,遵循常量命名约定(UPPER_CASE)是一个好主意,以及如何在其中放置初始值?
答案 0 :(得分:5)
您可以使用Collections.unmodifiableSet,在创建后使您的集不可变。如果您不想在对象集合中使用重复元素,请使用set。可选地,myset中的元素也是不可变的,因此没有人可以修改集合中的元素或元素的状态。
Set<String> elementSet = new HashSet<String>();
elementSet.add("abc");//to populate
elementSet.add("pqr");
Collections.unmodifiableSet(elementSet);
答案 1 :(得分:2)
是的,您应该使用字段名称的全大写约定。
您可以在单个语句中初始化变量,而无需静态初始化块:
private static final Set<Character> SPECIAL_CHARACTERS =
Collections.unmodifiableSet(
new HashSet<>(Arrays.asList('"', '\'', ' ', '\\')));