使用HashSet作为常量

时间:2014-12-21 14:02:39

标签: java constants hashset

我有一个方法,用于将对象的映射转换为人类可读的键值对。为此,我需要一些字符,如引号,空格和反斜杠,默认情况下将被解释为控制字符,如果在键或值中使用,则需要转义。由于不会有任何重复,我需要快速查找,我假设一个集合是最好的选择,但是(对我的知识)你不能锁定一个集合,它可能会被意外更改。

将HashSet作为常量是否是个好主意,是否有一种方法可以使它成为不可变的,遵循常量命名约定(UPPER_CASE)是一个好主意,以及如何在其中放置初始值?

2 个答案:

答案 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('"', '\'', ' ', '\\')));