gpt4 book ai didi

java - 我应该使用 EnumSet 吗?

转载 作者:行者123 更新时间:2023-12-01 13:45:13 29 4
gpt4 key购买 nike

我正在尝试构建一个“平面文件阅读器”。这些文件将有几个相关的列,例如“客户姓名”、“电话”等,但每个平面文件的列号都不同;此外,某些平面文件将具有其他文件没有的列。

我希望 FlatFileReader 类可以读取每个不同的文件。因此,我为第一个平面文件创建了一个枚举,其中值是数组的索引。

enum Columns { NAME, TELEPHONE, PAYMENT }
...
String[] columns = new String[3];
columns[0] = line.substring(0,29); //Name
columns[1] = line.substring(30,36); //Telephone
columns[2] = line.substring(37); //Payment

因此,为了从平面文件中获取名称,FlatFileReader 将调用以下方法:

file.get (Columns.NAME);

和 FlatFileA 会查找索引 0。将会有各种各样的平面文件类,我希望每个类都继承相同的枚举,以便它是一致的;问题是某些文件没有某些列。因此,如果 FlatFileB 没有 TELEPHONE 列,我就无法在父类(或接口(interface))中执行 NAME、TELEPHONE、PAYMENT 操作。

我该如何解决这个问题?这就是 EnumSet 的使用方式吗?每个子类可以创建一个 EnumSet 并且只添加它需要的常量吗?如果我创建了一个 EnumSet 并且仅添加了 NAME 和 PAYMENT,那么 PAYMENT 现在的值为 1(在 EnumSet 内)还是仍为 2?

最佳答案

EnumSet 只是 Set 接口(interface)的另一个实现。实现 Set 接口(interface)意味着它的行为与 Set 和任何其他实现一样。区别在于性能、可接受的值和迭代顺序。

EnumSet 的优点是速度,缺点是 EnumSet 只能将枚举常量作为成员。由于每个枚举常量都有一个从零开始的 ordinal(),因此 EnumSet 使用位串表示形式,其中每个位表示集合中元素的存在/不存在。选择 EnumSet 会使 contains(All)、add(All)、remove(All) 和 keep(All) 的运行速度比 TreeSet 和 HashSet 快得多。

不,枚举常量永远不会改变它的ordinal()(尽管我不确定这是否是你的意思)。

关于java - 我应该使用 EnumSet 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20413737/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com