假设我有一个名为行星的枚举,其中包含VENUS,EARTH和MARS。我将有很多数组列表,每个类型最多只能包含一个。我希望按照VENUS,EARTH和MARS的顺序始终对每个数组列表进行排序。
我需要使用比较器吗?是否有一种方法可以在插入后自动对它们进行排序,还是需要在每次插入后调用sort?我是否需要在每种类型中保留一个int值来区分它们的顺序?
如果您有任何建议,请提供其他建议,谢谢。
答案 0 :(得分:3)
我会有很多数组列表 每种类型最多只能容纳一种。一世 希望保持每个数组列表排序 所有时间
您所描述的是SortedSet
(例如TreeSet
),不 a List
。
要确定排序顺序,只需在定义枚举常量时按顺序放置枚举常量。如果您不想这样做或需要不同的排序顺序,可以使用Comparator
作为TreeSet
的构造函数参数。
或者,您可以使用EnumSet
,它不实现SortedSet
,但也会按照声明枚举常量的顺序迭代内容。它也非常快速且具有内存效率。
答案 1 :(得分:3)
最常见的解决方案是使用TreeSet,它在插入时按顺序保存项目。如果你没有提供比较器,那么它将保持“自然排序”,对于枚举是它们被声明的顺序。由于该顺序易于改变,你最好的选择是使用自定义比较器声明TreeSet在必要时命令他们。
当然,如果你只有3个枚举,并且每个集合中最多只有一个,你可能是懒惰的,并按正确的顺序手动将它们放入EnumSet中,但TreeSet可能是“正确的”方法。从长远来看。
答案 2 :(得分:2)
来自Java Doc
将此枚举与指定的订单对象进行比较。返回负整数,零或正整数,因为此对象小于,等于或大于指定对象。枚举常量仅与同一枚举类型的其他枚举常量相当。此方法实现的自然顺序是声明常量的顺序。
所以,如果没问题,你就不需要实现比较器了,但如果你想要按字母顺序排列,你需要这样做。
答案 3 :(得分:0)
Arrays.asList(Planets.values())
答案 4 :(得分:0)
订单由enum fascility维护。
答案 5 :(得分:0)
您可以使用EnumSet。它保持枚举按其自然顺序排序(即您在枚举声明中指定的顺序)。这是记录的功能,您可以信赖它。
答案 6 :(得分:0)
另请注意,Enums有一个“序数”方法,它返回定义该值的位置或顺序。