tl;博士
为了更好地管理编译时已知的此类不可变数据,请为每个颜色组创建一个枚举,其中包含颜色名称的集合或列表。
enum ColorGroup
{
DARK_ORANGE( List.of( "3darkchartreuse" ) ),
DULL_GRAY( List.of( "4mutedcyan" , "3lightmaroon" ) );
private List < String > colors;
// Constructor
ColorGroup ( List < String > colors )
{
this.colors = colors;
}
// Getter
public List < String > getColors ( )
{
return this.colors;
}
}
使用那个枚举。
for ( ColorGroup colorGroup : ColorGroup.values() )
{
System.out.println( "colorGroup name: " + colorGroup + " contains: " + colorGroup.getColors() );
}
颜色组名称:DARK_ORANGE 包含:[3darkchartreuse]
颜色组名称:DULL_GRAY 包含:[4mutedcyan, 3lightmaroon]
Map
如果您想为每个数组关联一个文本名称,请使用Map。映射将条目存储为配对,即导致值的键。在您的情况下,键是 String 对象,值是数组。
Map < String, String[] > map = new TreeMap <>();
map.put( "Dark Orange" , new String[] { "3darkchartreuse" } );
map.put( "Dull Gray" , new String[] { "4mutedcyan" , "3lightmaroon" } );
System.out.println( map );
运行时:
{深橙色=[Ljava.lang.String;@77459877, 暗灰色=[Ljava.lang.String;@5b2133b1}
枚举与文本
使用文本进行此类标记可能容易出错。例如,拼写 "Dark Grey" 与 "Dark Gray"。
所以你可以选择使用非常简单但功能强大的enum facility found in Java。枚举对象是constants,在类加载时自动实例化。作为常量,它们的名称按照 Java 约定以全大写形式书写。作为命名对象,它们的使用在编译时检测拼写错误,并提供type-safety。
enum ColorGroupName
{
DARK_ORANGE,
DULL_GRAY
}
EnumMap
对于使用枚举对象作为键的Map,使用EnumMap 实现以非常快的速度执行,使用很少的内存。
Map < ColorGroupName, String[] > map = new EnumMap( ColorGroupName.class );
map.put( ColorGroupName.DARK_ORANGE , new String[] { "3darkchartreuse" } );
map.put( ColorGroupName.DULL_GRAY , new String[] { "4mutedcyan" , "3lightmaroon" } );
System.out.println( map );
集合与数组
我们中的许多人更喜欢 collections 而不是数组。
Map < ColorGroupName, List < String > > map = new EnumMap( ColorGroupName.class );
map.put( ColorGroupName.DARK_ORANGE , List.of( "3darkchartreuse" ) );
map.put( ColorGroupName.DULL_GRAY , List.of( "4mutedcyan" , "3lightmaroon" ) );
System.out.println( map );
运行时:
{DARK_ORANGE=[3darkchartreuse], DULL_GRAY=[4mutedcyan, 3lightmaroon]}
不可变数据
如果您的地图要保持不变,请使用Map.of 创建unmodifiable map。
Map < ColorGroupName, List < String > > map =
Map.of(
ColorGroupName.DARK_ORANGE , List.of( "3darkchartreuse" ) ,
ColorGroupName.DULL_GRAY , List.of( "4mutedcyan" , "3lightmaroon" )
);
System.out.println( map );
包含数据的枚举
如果你想变得更聪明,你可以将你的颜色列表存储在你的枚举中。
枚举是一种特殊的 Java 类,但仍然是 Java 类。作为一个 Java 类,它可以携带成员变量。它可以提供一个构造函数。要在枚举中存储数据,请将每个枚举对象的数据传递给其构造函数调用。
enum ColorGroup
{
DARK_ORANGE( List.of( "3darkchartreuse" ) ),
DULL_GRAY( List.of( "4mutedcyan" , "3lightmaroon" ) );
private List < String > colors;
// Constructor
ColorGroup ( List < String > colors )
{
this.colors = colors;
}
// Getter
public List < String > getColors ( )
{
return this.colors;
}
}
使用那个枚举。
for ( ColorGroup colorGroup : ColorGroup.values() )
{
System.out.println( "colorGroup name: " + colorGroup + " contains: " + colorGroup.getColors() );
}
颜色组名称:DARK_ORANGE 包含:[3darkchartreuse]
颜色组名称:DULL_GRAY 包含:[4mutedcyan, 3lightmaroon]
Map 实现
这是我为帮助选择Map 实现而制作的图表。